シーン:毎日の仕事、あなたは(新会社は、新しいプロジェクト、デーモンの新しいパッケージの必要性を始めたなど)、複数の内部の基本的な枠組み場合、ソリューションが必要に例新しいソリューションを作成する必要性が発生する可能性がありますプロジェクトの規模に応じて、DDDモード、そして新しいプロジェクトから様々な参考に、実際に利用可能に頼ることができるように、構成の多くは再設定が必要、テスト、時間がかかり、多くの場合、それは1〜2時間かかる以上あり長い時間のために。
.NETコア前に、関連するソリューションは、「プロジェクトテンプレート」この需要が、特定の操作は、.NETのコア1.0から始めて、提供したときに非常に便利な「テンプレートエンジンを、」新しい-installをDOTNET追加を達成することができますが、 (-i)コマンドとオプションは、このコマンドを使用すると、簡単に自分のプロジェクトテンプレートを作成することができます。
この記事では、学び、習得することができます:
- プロジェクトテンプレートとしてどのように既存のソリューションプロジェクトをご覧ください。
- ローカルプロジェクトテンプレートを作成して、インストールして使用する方法を学びます。
- どのようにnugetパッケージにパッケージ化ローカルテンプレートを習得し、テンプレートパッケージIDを使用してインストールします。
- シンプルDOTNETとnugetコマンドとその構成を理解し、習得します。(WindowsとMacの違いが説明を行います)
準備
あなたは私のgithubのリポジトリにすることができますhttps://github.com/ArtechChu/Template直接テンプレートのソースコードをダウンロード
- プロジェクトでは2、Template.ConsoleとTemplate.WebApiの合計を発行しました
- 単に他のプロジェクト出力への参照であるコンソールプロジェクト。
- シンプルな構成の依存性注入の下WEBAPIプロジェクトは、テンプレートプロジェクトのAPIとして、このプロジェクトを使用することができます
コンソールプロジェクト概要:
WEBAPIプロジェクト概要:
ローカルテンプレートとしてローカルプロジェクトには、コマンドをインストールして使用します
コンソール1は、本実施例では、コンソールプロジェクトは、コピーフォルダに以下の項目を関与しました:
![](https://pic.zhuliang.ltd/20190728170424.png)
2.手動で「.template.config」フォルダと呼ばれるファイルを作成し、フォルダ内のファイルを作成します。template.jsonを
{
"$schema": "http://json.schemastore.org/template",
"author": "Artech",
"classifications": [ "Console" ],
"name": "Custom Console",
"identity": "Custom Console", //模板唯一标识
"groupIdentity": "Custom Console",
"shortName": "CustomConsole", //【修改】短名称,使用 dotnet new <shortName> 安装模板时的名称
"tags": {
"language": "C#",
"type": "project"
},
"sourceName": "Template", //【修改】在使用 -n 选项时,会替换模板中项目的名字
"preferNameDirectory": true
}
- 这里主要说明下 shortName 和 sourceName 这 2 个属性。
- shortName:短名称,用于在使用“dotnet new -l”命令时显示,安装时也可直接根据该短名称进行安装。
- sourceName:当我们在使用”dotnet new” 命令进行安装时,如果指定了 -n 或者 -o 选项,那么选项后面的名字会自动替换 sourceName 中指定的名字,因为我们的项目命名规则是 “Template.XXXX”,所 这里设定为“Template”,如果你的项目命名规则是“公司.项目.XXX”,那么这里请设定为“公司.项目”。
3. 安装该模板到本地模板库
# 通过如下命令查看当前本机已安装模板:
dotnet new -l
# 模板安装命令:dotnet new i <path | nugetId>
# 这里因为是安装本地模板,直接使用路径(绝对和相对均可)
dotnet new -i .
4. 安装该短名称为 CustomConsole 的模板
假定安装路径为 D:\TestTemplate
假定新起的项目名为“Company.Group”
# 这里使用 -n 和 -o 选项来分别指定新项目的名字以及输出目录
# 设定新项目的名字为“Company.Group”,因为当前定位已经在 TestTemplate 文件夹内,所以直接用“.”,如下:
dotnet new CustomConsole -n Company.Group -o .
文件夹内容如下:
- 使用模板新建的项目文件夹自动为“Company.Group.XXXX”
测试:
更多关于 template.json 的说明请参考:http://json.schemastore.org/template
- 在 template.json 中,你还可以指定 symbols 等,来实现更多的自定义功能,如联动预编译指令等等。
将本地项目打包为 nuget 包,并通过命令进行安装和使用
本次示例以 Console +WebApi 为例,在 Templates\Nuget 文件夹中,建立 Content 文件夹用于存放 nuget 包内容,具体如下:
- ConsoleTemplate 中的 .template.config\template.json 内容同上方 Console 示例。
- WebApiTemplate 中的 .template.config\template.json 内容如下:
{
"$schema": "http://json.schemastore.org/template",
"author": "Artech",
"classifications": [ "WebApi" ],
"name": "Custom WebApi",
"identity": "Custom WebApi",
"groupIdentity": "Custom WebApi",
"shortName": "CustomWebApi",
"tags": {
"language": "C#",
"type": "project"
},
"sourceName": "Template",
"preferNameDirectory": true
}
1. 在 content 目录内创建一个 nuspec 文件:Custom.Template.NetCore.nuspec,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Custom.Template.NetCore</id>
<version>1.0.1</version>
<description>
Custom Template, including WebApi, Console
</description>
<authors>Artech</authors>
<packageTypes>
<packageType name="Template" />
</packageTypes>
</metadata>
</package>
- 需要注意,packageType 为 Template,metadata.id 必须保证唯一,其他按需设置即可。
- 必须是在 content 文件夹内。nuget 在打包的时候,是根据 content 文件夹来进行的。
2. 使用 nuget pack 命令打包
# 注意路径的相对位置
nuget pack Custom.Template.NetCore.nuspec -OutputDirectory .
- 打包后的内容为:
3. 发布该 nuget 包到 nuget server
这里用的是自建 nuget server,你可以按自身情况打包上传。
- 你可以直接使用 Nuget Package Explorer 进行发布包
- 也可以使用 nuget push 来发布,如下:
nuget push Custom.Template.NetCore.1.0.1.nupkg -Source "你的nuget 服务 url" -ApiKey "你的nuget api key"
4. 通过 nuget 安装模板到本地
- 安装前本地已经安装的模板如下:
- 安装
dotnet new -i Custom.Template.NetCore::*
5. 通过模板安装 CustomWebApi
安装路径为:D:\TestWebApiTemplate
dotnet new CustomWebApi -n Company.Group -o .
6. 创建一个解决方案,并将所有的项目添加到解决方案 Company.Group.sln 中
dotnet new sln -n Company.Group
# windows 下无法使用 glob pattern 只能逐个添加
dotnet sln Company.Group.sln add Company.Group.Application\Company.Group.Application.csproj
dotnet sln Company.Group.sln add Company.Group.Domain\Company.Group.Domain.csproj
dotnet sln Company.Group.sln add Company.Group.DomainService\Company.Group.DomainService.csproj
dotnet sln Company.Group.sln add Company.Group.IApplication\Company.Group.IApplication.csproj
dotnet sln Company.Group.sln add Company.Group.IDomainService\Company.Group.IDomainService.csproj
dotnet sln Company.Group.sln add Company.Group.Infrastructure.CrossCutting\Company.Group.Infrastructure.CrossCutting.csproj
dotnet sln Company.Group.sln add Company.Group.Repository\Company.Group.Repository.csproj
dotnet sln Company.Group.sln add Company.Group.WebApi\Company.Group.WebApi.csproj
如果你用的是 mac / linux ,则可以直接用 globbing pattern 来添加,如下:
dotnet sln Company.Group.sln add **/*.csproj