教程:创建项目模板

使用 .NET,可以创建和部署生成项目、文件和资源的模板。 本教程是一系列教程的第二部分,介绍如何创建、安装和卸载模板以用于 dotnet new 命令。

小窍门

可以在以下存储库中找到随 .NET SDK 附带的官方 .NET 模板:

模板 资料库
控制台、类库和常见项模板 dotnet/sdk
ASP.NET 和 Blazor 模板 dotnet/aspnetcore
ASP.NET 单页应用程序模板 dotnet/spa-templates
WPF 模板 dotnet/wpf
Windows 窗体模板 dotnet/winforms
测试模板 dotnet/test-templates
MAUI 模板 dotnet/maui

可以通过运行命令来查看计算机上安装的 dotnet new list 模板。

在本系列的这一部分中,你将了解如何:

  • 创建项目模板的资源。
  • 创建模板配置文件夹和文件。
  • 从文件路径安装模板。
  • 测试项目模板。
  • 卸载项模板。

先决条件

  • .NET 9 或更高版本。

  • 完成本教程系列 的第 1 部分

  • 打开终端并导航到 工作\内容 文件夹。

创建项目模板

项目模板生成现成的项目,使用户能够轻松开始使用一组工作代码。 .NET 包括一些项目模板,例如控制台应用程序或类库。 在此示例中,将创建一个新的控制台应用程序项目,该项目将标准“Hello World”控制台输出替换为异步运行的控制台。

在终端中,导航到 working\content 文件夹,并创建名为 consoleasync 的新子文件夹。 输入子文件夹并运行 dotnet new console 以生成标准控制台应用程序。 编辑此模板生成的文件以创建新模板。

working
└───content
    └───consoleasync
            consoleasync.csproj
            Program.cs

修改Program.cs

打开 Program.cs 文件。 标准控制台项目不会异步写入控制台输出,因此需要添加异步功能。 将代码更改为以下内容并保存文件:

// See https://aka.ms/new-console-template for more information
await Console.Out.WriteAsync("Hello World with C#");

创建模板的内容后,需要在模板的根文件夹中创建模板配置。

创建模板配置

在本教程中,模板文件夹位于 working\content\consoleasync

.NET 识别模板,因为它们在模板文件夹的根目录中有一个特殊的文件夹和配置文件。

首先,创建一个名为 .template.config的新子文件夹,然后输入它。 然后,创建一个名为 template.json的新文件。 文件夹结构应如下所示:

working
└───content
    └───consoleasync
        └───.template.config
                template.json

使用你喜欢的文本编辑器打开 template.json ,并粘贴以下 json 代码并保存它。

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Me",
  "classifications": [ "Common", "Console" ],
  "identity": "ExampleTemplate.AsyncProject",
  "name": "Example templates: async project",
  "shortName": "consoleasync",
  "sourceName":"consoleasync",
  "tags": {
    "language": "C#",
    "type": "project"
  }
}

此配置文件包含模板的所有设置。 可以看到基本设置,例如 nameshortName,但也存在一个 tags/type 设置为 project的值。 这会将模板分类为“项目”模板。 对创建的模板类型没有限制。 itemproject 值是 .NET 推荐的常用名称,这样用户可以轻松筛选他们正在搜索的模板类型。

当用户使用模板时,该项 sourceName 将被替换。 配置文件中 sourceName 的值会在搜索每个文件名和文件内容时被查找,并且在默认情况下替换为当前文件夹的名称。 当传递-n--name参数与dotnet new命令时,将使用提供的值,而不是当前文件夹名称。 在此模板中, consoleasync 将在 .csproj 文件的名称中替换。

classifications项表示运行dotnet new并获取模板列表时看到的标记列。 用户还可以基于分类标记进行搜索。 不要将 tags 属性与 template.json 文件中的classifications标记列表混淆。 它们是两个不同的概念,不幸地命名为相同。 template.json 文件的完整架构位于 JSON 架构存储中,并在 template.json参考中介绍。 有关 template.json 文件的详细信息,请参阅 dotnet 模板化 wiki

拥有有效的 .template.config/template.json 文件后,模板即可安装。 在安装模板之前,请确保删除模板中不希望包含的任何额外文件夹和文件,例如 binobj 文件夹。 在终端中,导航到 consoleasync 文件夹,然后运行 dotnet new install .\ 以安装位于当前文件夹的模板。 如果使用 Linux 或 macOS 操作系统,请使用正斜杠:dotnet new install ./

dotnet new install .\

此命令输出已安装模板的列表,其中应包括你的模板。

The following template packages will be installed:
   <root path>\working\content\consoleasync

Success: <root path>\working\content\consoleasync installed the following templates:
Templates                                         Short Name               Language          Tags
--------------------------------------------      -------------------      ------------      ----------------------
Example templates: async project                  consoleasync             [C#]              Common/Console

测试项目模板

安装项目模板后,请对其进行测试。

  1. 导航到 测试 文件夹。

  2. 使用以下命令创建新的控制台应用程序,它生成一个工作项目,可以使用该命令轻松进行测试 dotnet run

    dotnet new consoleasync -n MyProject
    

    你将获得以下输出。

    The template "Example templates: async project" was created successfully.
    
  3. 使用以下命令运行项目。

    dotnet run
    

    你将获得以下输出。

    Hello World with C#
    

祝贺! 你已使用 .NET 创建并部署了项目模板。 为准备本教程系列的下一部分,请卸载创建的模板。 请确保也从 测试 文件夹中删除所有文件。 这将帮助您回到干净的状态,为本教程系列的下一部分做好准备。

卸载模板

在终端中,导航到 consoleasync 文件夹并运行以下命令以卸载位于当前文件夹中的模板:

  • 在 Windows 上dotnet new uninstall .\
  • 在 Linux 或 macOS 上dotnet new uninstall ./

此命令输出卸载的模板列表,其中应包括你的模板。

Success: <root path>\working\content\consoleasync was uninstalled.

随时可以使用 dotnet new uninstall 查看已安装的模板包列表,包括每个模板包的卸载命令。

后续步骤

在本教程中,你创建了一个项目模板。 若要了解如何将项模板和项目模板打包到易于使用的文件,请继续本教程系列。