从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板
标题:从零开始实现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包供其他人使用。
如果要创建一个模板,这里首先我们需要创建一个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来打包项目模板供其他人使用,这样就解决了我们之前手动创建插件项目繁琐的问题。下一期,我会尝试将模块的业务逻辑抽象出来,创建一个核心类库,大家敬请期待。
从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板相关推荐
- 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级
标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...
- 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装
标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11343141. ...
- 从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图
标题:从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwql ...
- 从零开始实现 ASP.NET Core MVC 的插件式开发(七) - 问题汇总及部分问题解决方案...
标题:从零开始实现 ASP.NET Core MVC 的插件式开发(七) - 问题汇总及部分问题解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/ ...
- 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件
标题:从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/112 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用
标题:从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用. 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1171 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图...
如果你使用过一些开源CMS的话,肯定会用过其中的的插件化功能,用户可以通过启用或者上传插件包的方式动态添加一些功能,那么在ASP.NET Core MVC中如何实现插件化开发呢,下面我们来探究一下. ...
- 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用ApplicationPart动态加载控制器和视图
目录 前言 什么是ApplicationPart? 创建项目 添加控制器和视图 如何动态加载插件中的控制器?# 如何加载组件的预编译Razor视图? 最终效果 总结 源代码:https://githu ...
- ASP.NET Core appsettings.json文件(9)《从零开始学ASP.NET CORE MVC》:
本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:ASP.NET Core launchsettings.json文件 ASP.NET Core appsettings.j ...
最新文章
- list控件响应鼠标键的单双击
- 网络推广软件介绍外链坚持七大原则助力网站排名“蹭蹭上涨”!
- Linux01-bash脚本编程之六使用脚本选项及组合条件测试23
- windows7 docker mysql_DOCKER windows 7 详细安装教程
- sublime php语法检查
- 1.3 字符串的全排列
- uds帧格式_如何看懂UDS诊断报文
- Linux -单用户模式(忘记Linux的root密码)
- Gitlab备份、升级、恢复
- 循道丨全球最大资管公司贝莱德的崛起
- java实现beamsearch_Beam Search、Tensorflow下如何构建Beam Search
- 中山大学计算机学院离散数学,中大信科院计算机复试专业课离散数学.pdf
- 数学建模思路模板经典案例(看完快速入门)
- 从思维走向实践,数字化转型 IT 经营的成功路径
- 销售型呼叫中心系统特点
- 模仿实现百度搜索黑洞动画效果
- 你离大牛就差这10家国内知名的慕课网站。
- 问题 F: 超超的自闭意思
- 怎么批量提取图片的文件名?
- Flash交互课件模版
热门文章
- 知道第一章计算机基础知识作业答案,大学计算机基础作业答案
- 使用Ubuntu的公用文件夹轻松地在计算机之间共享文件
- Progressive Web App(PWA)
- java避免使用orderby_java – @OrderBy在JPA中无法正常工作
- Spring Boot 使用Redis
- jquery.cookie.js 使用小结
- Mybatis——返回类型为 集合嵌套集合 应该如何处理
- 编码之道:取个好名字很重要
- 人的一生能交多少朋友?
- Vertex Texture Fetch(VTF) Fragment Texture Fetch ( FTF )