业务代码敲多了免不了CtrlCV,每次开新项目的时候脚手架搭起来费时费力,经常要翻看老项目复制来复制去,那么有没有可能自己造一个类似自带的WebApi模板那样的脚手架来快速生成项目呢?答案是有的,我们可以通过dotnet创建项目模板,甚至还可以发布到nuget上供身边同事使用。
准备自己的项目模板
既然我们要造个项目脚手架模板,那么这个模板肯定要有个原型,我们需要先准备一个能够编译通过的.NetCore项目:

我这里是一个基于Furion框架自己改良的快速webapi开发脚手架,Furion这个框架没有什么多余的东西,基本就是把微软的东西再封装了一遍,提供给你方便使用,是一个国人开发的.Net5框架,用起来我个人感觉还是挺爽的,我这里整合了源码进行使用,而不是通过引用dll,因为源码更方便调试和根据自己需要进行更改。
注意记得清空解决方案,不要将编译后的dll留在模板中。
将项目模板导入到Dotnet模块库中
首先创建固定格式的原文件和文件夹,在你电脑的任何地方都可以,新建一个模板文件夹template,然后在其内部新建一个模板名称的文件夹,最后再在其内部创建一个content文件夹,然后将你的项目模板置于其中,最后文件夹目录结构如下:

之后我们需要定义模板的配置文件,也就是template.json,如上图所示,在源代码的根目录添加.template.config文件夹,然后在其内部创建template.json文件,在其内部进行模板元信息的配置:
{
"$schema": "http://json.schemastore.org/template",//template.json 文件的 JSON 架构,可以不要该键值对
"author": "葫芦", //必填!模板创建者
"classifications": [ //必填,这个对应模板的Tags,其他的比如 [ "Common", "Console" ]
"Furion",
"WebApi",
"Api",
"FreeSql"
],
"name": "HuLu Api", //必填,这个是模板名,比如ASP.NET Core Web API
"identity": "HuLu.Template.Api", //可选,模板的唯一名称
"shortName": "huluapi", //必填,这个对应模板的短名称,比如webapi
"tags": {
"language": "C#",
"type": "project"
},
"sourceName": "HuLuApi", // 可选,要替换的名字,这个就是模板的项目名,以后新建的时候,会把这个名字替换成其他,比如HuLuCustomApi(警告!这里不要写一些专用词汇,比如app呀,net呀,core之类的)
"preferNameDirectory": true // 可选,添加目录
}
之后就可以将模板分发到dotnet模板里了:
# 注意文件路径:content文件夹的上一级
dotnet new -i D:\Program\TPL\HuLuApi
分发后,使用dotnet new -l 查看模板列表:

卸载:
dotnet new -u D:\Program\TPL\HuLuApi
将模板打包为Nuget包
最后就是将模板发布到Nuget了,在content目录的同级目录下,添加.nuspec文件,该文件用于描述Nuget包,文件名为你的模板名称,也是下文中的Id,在nuget.org或该包所在的仓库必须是唯一的:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>HuLu.Template.Api</id>
<version>1.0.3</version>
<description>基于 Furion 框架快速搭建 Api 多层架构模板。</description>
<authors>葫芦</authors>
<packageTypes>
<packageType name="Template" />
</packageTypes>
<!-- <icon>icon.png</icon> -->
<license type="expression">MulanPSL-2.0</license>
</metadata>
<!-- <files>
<file exclude="**\bin\**;**\obj\**" />
</files> -->
</package>
当你对模板有所更改后要重新发布时,记得修改该文件的version。
之后下载Nuget.exe工具对模板进行打包,将该工具下载至.nuspec文件的同级目录下:

之后打开cmd命令行(必须是cmd不能是powershell),进入到nuget.exe所在文件夹,运行打包命令:
nuget pack D:\Program\TPL\HuLuApi\HuLu.Template.Api.nuspec
成功打包后,生成如下文件:

这个nupkg已经支持生成项目模板了,如果要发布到nuget官方仓库的话,还需要进行一些操作。
发布到Nuget官方仓库
首先你需要先到Nuget.org注册账号。
然后点击Upload:

上传你刚才生成.nupkg文件,nuget.org会告诉你包名是否可用,如果无法使用的话,改一下ID重新打包就可以了,如果包名验证通过,接下来nuget.org会打开验证部分,最后在导入文档下编辑你对该模板的说明和readme就可以了。
当所有信息准备好后,点击提交,nuget.org会开始进行病毒扫描,然后进行发布,大概等10分钟左右,你会收到一封邮件,提示你已发布成功。

发布成功后,使用dotnet new -i HuLu.Template.Api就可以使用nuget包创建新项目了。