使用场景
自己经过多年开发的沉淀后,开发出一个属于自己的一套Demo项目,亦或是借鉴别人的项目后,优化了一个,然后我们在别的地方使用的时候(可能是下一个公司),如果还想用自己的模板,也可能是供新入职的同事使用,经常会是以下几个办法
1、对比着之前的项目结构,在VistulStudio中手动创建一个空的解决方案,从零开始,一点一点搭建。// 麻烦之大,可想而知
2、通过dotnet cli 命令来创建空项目,然后手动。// 会简化一丢丢,但仍需要一层一层的创建类库;
3、把Demo工程代码里拷贝到U盘,或者上传到云盘,然后下载下来,改吧改吧。// 寻找过程很麻烦,依赖代码承载工具;
4、把Demo工程代码 Pull 到 Github 上,在别的地方直接 Clone ,然后改吧改吧。 // 开源出源码,私密性不强;
大家可以看到,上边的这几个办法,都会有这样或那样的问题,快的不方便,方便的太局限。而且上边的这些都有一个通病,不知道大家是否发现:就是不能快速修改工程名称!举个栗子,我的这个 Github 上的项目,大家下载下来,怎么快速把 Webapi.Core 改成 xxx.xxx 呢?
准备Demo项目模板
准备一个整理好的Demo模板,下面是我的模板地址
https://github.com/huguodong/Webapi.Template
将 Demo 模板导入到dotnet模块库中
在你的电脑任何地方,新建一个模板文件夹temple,用于以后打包多个模板使用:
├── temple // 用来存放所有的模板 │ ├── WebapiCoreTemple // WebapiCore模板全部内容 │ │ ├── content // 存放Code 项目代码,可直接运行 │ │ │ ├── Webapi.Core │ │ │ ├── . │ │ │ ├── . │ │ │ ├── . │ │ │ ├── Webapi.Core.Services │ │ │ └── Webapi.Core.sln │ │ │ │ │ ├── license // 存放版本许可信息,如果不添加,后边会警告,文章后边会提到 │ │ │ └── license.txt │ │ │ │ │ └── 其他待定 // 这里文章后边会打包的时候用到 │ │
接下来咱们定义配置文件:
- 向源代码项目的根目录添加 .template.config 文件夹(注意是文件夹),到时候与它同级的文件都会被打包。
- 在 .template.config 文件夹中,创建 template.json 文件来配置模板。
{ "$schema": "http://json.schemastore.org/template",//template.json 文件的 JSON 架构,可以不要该键值对 "author": "huguodong", //必填!模板创建者 "classifications": [ "Web/WebAPI" ], //必填,这个对应模板的Tags,其他的比如 [ "Common", "Console" ], "name": "Core.Webapi.Template", //必填,这个是模板名,比如ASP.NET Core Web API "identity": "Core.Webapi.Template.HGD", //可选,模板的唯一名称 "shortName": "corewebapi", //必填,这个对应模板的短名称,比如webapi "tags": { "language": "C#" , "type":"project" }, "sourceName": "Webapi.Core", // 可选,要替换的名字,这个就是模板的项目名,以后新建的时候,会把这个名字替换成其他,比如HelloBlog(警告!这里不要写一些专用词汇,比如app呀,net呀,core之类的) "preferNameDirectory": true // 可选,添加目录 }
经过上面两步的处理,咱们已经把模板源代码准备好了,并且也按照固定的规则,把配置文件配置好了.接下来就是把代码导入到 dotnet 模板里。
代码DOS命令窗口,输入命令:
// 使用文件分发模板, // 注意文件路径:content文件夹的上一级,可以对比上边的截图中的文件夹结构 dotnet new -i F:\temple\WebapiTemple
卸载命令:
dotnet new -u F:\temple\WebapiTemple
使用dotnet新模板创建一个项目
随便找一个文件夹,然后执行我们的操作:
F:\test>dotnet new corewebapi -n New.Core
自动根据Demo帮我们创建好了项目,而且项目名也改了
打包项目成Nupkg包
在 content 文件夹旁边,添加 nuspec 文件。 nuspec 文件是 XML 清单文件,用于描述包内容,并促进创建 NuGet 包。
下边范本文件中的汉字只是我的解释说明,如果你自己做,请千万要去掉,不能带中文字符!
"1.0" encoding="utf-8"?>"http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> Webapi.Core.Template.HGD // nuget包标识,在 nuget.org 或包驻留的任意库中必须是唯一的1.0.0 // 遵循 major.minor.patch 模式的包版本。Creates a core webapi app.// 用于 UI 显示的包的详细说明。 huguodong // 包创建者的逗号分隔列表,与 nuget.org 上的配置文件名称一致"Template" />// 包类型 "file">license\license.txt // 上文提到的许可证信息
下载Nuget.exe:https://www.nuget.org/downloads 把下载好的 nuget.exe 拷贝到 nuspec 范本文件同级的目录中:
打开 DOS 命令窗口,进入到当前文件夹,然后直接运行打包命令:
// 执行打包操作,文件地址就是 nuspec 范本地址 nuget pack Webapi.Core.Template.HGD.nuspec
本地测试
然后执行命令:
// 将nupkg 包分发 dotnet new -i F:\temple\WebapiTemple\Webapi.Core.Template.HGD.nuspec
如果能够成功安装表示打包成功
发布包到 Nuget
首先你需要在 nuget.org 官网注册账号,这里不细说,然后点击到上传页面:https://www.nuget.org/packages/manage/upload,点击“browse”
nuget.org 会告知包名称是否可用。 如果无法使用,则更改项目中的包标识符、重新生成,并重试上传。
当所有信息准备就绪后,选择“提交”按钮
上传成功后,nuget 会后台进行扫描病毒,然后进行发布,中间大概等待10分钟后,你会收到一个官方的邮件,提示你已经发布成功。
Nuget包导入到dotnet模板,并创建新工程
在上边发布成功了以后,我们直接就可以通过 nuget 唯一包id,来进行导入dotnet 模板操作:
// 通过nuget.org ID 导入分发,这个名称,就是我们之前在 nuspec 范本文件中,配置的nuget包 ID
dotnet new --install Webapi.Core.Template.HGD::1.0.0
执行之前用到的创建模板的命令,成功生成了项目:
dotnet new corewebapi -n New.Core