从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何建立项目模板

标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何建立项目模板
做者:Lamond Lu
地址:http://www.javashuo.com/article/p-cczcrief-gb.html
源代码:https://github.com/lamondlu/Mystiquehtml

在上一篇中,咱们介绍了经过一个最简单了例子,给你们演示了一下,如何在ASP.NET Core Mvc中借助ApplicationPart来开发一个插件。在文章的最后,咱们也提出了一些待解决的问题。git

首先呢,第一个要解决问题是,每次咱们建立一个新的插件,每次都要从新建立项目,添加类库引用,以及手动修改 csproj 文件,很是的繁琐。那么有没有一种方式能够减小这部分操做的?github

回想一下,当咱们每次使用 Visual Studio建立项目的时候,咱们均可以选择一个项目模板,Visual Studio不只能够根据咱们选择的模板建立出项目,并且咱们所需的程序集引用都会预先配置好,不须要咱们重复配置了。那么咱们是否能够本身建立一些模板呢?答案是确定的。json

本文中,我就来给你们演示一下,在如何为.NET Core项目建立项目模板,简化操做流程。asp.net

编写template.json

若是要建立一个项目模板,咱们须要作2件事情。ide

  • 建立一份项目代码做为模板
  • 编写template.json文件

这里咱们以前已经建立了一个DemoPlugin1的项目了,因此此次咱们能够直接将其转换成一个模板项目。.net

首先咱们在当前项目中添加一个 .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
}

配置说明:debug

  • 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>3d

使用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包供其余人使用。

若是要建立一个模板,这里首先咱们须要建立一个Nuget包的元数据文件,这里咱们命名为LamondDynamicPlugin.nuspec

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>LamondDynamicPlugin</id>
    <version>1.0.0</version>
    <description>
      Creates dynamic plugin in asp.net core
    </description>
    <authors>Lamond Lu</authors>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
  </metadata>
</package>

这里设置的属性都很简单,惟一须要注意的packageType必定要设置成Template

编写好元数据文件以后,咱们就可使用Nuget pack命令来打包了, 这个命令的第一个参数就是指定一个.nuspec文件所在的路径。

nuget pack DemoPlugin1/LamondDynamicPlugin.nuspec

运行以后,Nuget会生成一个LamondDynamicPlugin.nupkg文件,这个就是咱们所说的Nuget包了。

为了使用Nuget包的方式安装模板,咱们可使用相同的命令dotnet new -i

dotnet new -i LamondDynamicPlugin.nupkg

固然,一般来讲咱们都会将这个Nuget包发布到nuget.org, 这样就能够将这个模板分享给其余人了。

发布到Nuget以后,咱们就可使用LamondDynamicPlugin.nuspec中定义的惟一id来安装模板了。安装的命令和以前从目录安装模板是同样的。

dotnet new -i LamondDynamicPlugin

若是你想卸载某个模板,只须要使用dotnet new -u [Nuget包]便可。

dotnet new -u LamondDynamicPlugin

总结

本文中我演示了如何使用dotnet-CLI建立一个.NET Core的项目模板,以及如何使用Nuget来打包项目模板供其余人使用,这样就解决了咱们以前手动建立插件项目繁琐的问题。下一期,我会尝试将模块的业务逻辑抽象出来,建立一个核心类库,你们敬请期待。

相关文章
相关标签/搜索