标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板
作者:Lamond Lu
地址:https://www.cnblogs.com/lwqlun/p/11155666.html
源代码:https://github.com/lamondlu/DynamicPlugins
在上一篇中,我们介绍了通过一个最简单了例子,给大家演示了一下,如何在ASP.NET Core Mvc中借助ApplicationPart来开发一个插件。在文章的最后,我们也提出了一些待解决的问题。
首先呢,第一个要解决问题是,每次我们创建一个新的插件,每次都要重新创建项目,添加类库引用,以及手动修改 csproj 文件,非常的繁琐。那么有没有一种方式可以减少这部分操作的?
回想一下,当我们每次使用 Visual Studio创建项目的时候,我们都可以选择一个项目模板,Visual Studio不仅可以根据我们选择的模板创建出项目,而且我们所需的程序集引用都会预先配置好,不需要我们重复配置了。那么我们是否可以自己创建一些模板呢?答案是肯定的。
本文中,我就来给大家演示一下,在如何为.NET Core项目创建项目模板,简化操作流程。
编写template.json如果要创建一个项目模板,我们需要做2件事情。
创建一份项目代码作为模板
编写template.json文件
这里我们之前已经创建了一个DemoPlugin1的项目了,所以这次我们可以直接将其转换成一个模板项目。
首先我们在当前项目中添加一个 .template.config目录, 并在其中添加一个 template.json 文件。内容如下:
{ "author": "Lamond Lu", "classifications": [ "Web/Plugins" ], "name": "DemoPlugin1", "identity": "LamondDynamicPlugins", "shortName": "ldp", "tags": { "language": "C#" , "type":"project" }, "sourceName": "DemoPlugin1", "preferNameDirectory": true }配置说明:
Author属性指明了模板的作者,必填
classifications属性指明了模板的分类,必填
name表示模板的名称,当你使用dotnet new创建项目时,指定的模板名称,必填
identity表示模板的唯一名称,可选
shortName表示模板的简短名称,必填
tags为当前模板指定了一些标签
sourceName指定了一个字符串,当使用dotnet new指定-n参数的时候,-n参数的值,会替换sourceName指定的字符串。以当前项目为例,我们的项目文件名称和所有使用的命名空间都是DemoPlugin1, 但是如果我们生成新的项目不可能都是用这个名字,所以我们需要使用-n参数指定的项目名来替换"DemoPlugin1", 如果当前dotnet new命令指定的-n参数值为DemoPlugin2, 当项目创建成功时候,项目中所有的命名空间以及项目文件名称,都会使用新的DemoPlugin2
preferNameDirectory, 是否生成相同名称的目录,可选。
针对template.json的详细配置列表,有兴趣的同学可以查看一下链接<https://github.com/dotnet/templating/wiki/Reference-for-template.json>
使用dotnet-CLI创建模板编写完代码之后,我们就可以使用如下dotnet-CLI的命令来安装项目模板了。
dotnet new -i <PATH>这里<PATH>指定了当前模板项目所在的目录
运行命令之后,会输出一个最新的本地模板列表,我们可以发现DemoPlugin1已经作为模板出现在了列表中。
使用dotnet new创建项目当模板安装到本地之后,我们就可以使用dotnet new命令来创建项目了,比如我们现在要创建一个新的插件,我们就可以使用如下命令。
dotnet new ldp -n DemoPlugin2运行命令之后,对应的代码就生成出来了。来到项目目录中,我们发现之前的DemoPlugin1.csproj文件已经被更名为DemoPlugin2.csproj, 这说明之前在template.json文件中指定的sourceName属性帮我我们正确的替换了项目文件名。
随后,我们可以在查看一个代码中唯一个控制器,其命名空间也被正确替换了。
怎么样?这样是不是比之前手动的方式简单的很多?
注:如果你想要卸载刚刚安装的模板,你需要使用dotnet new --debug:reinit命令, 这里使用dotnet new -u命令是无法卸载的, dotnet new -u只适用与从nuget.org下载下来的模板包
如何将模板打包成Nuget包除了以上这种使用项目目录创建项目模板的方式,我们还可以将模板打包成Nuget包供其他人使用。