Artizan-MsOnAbp:将其自定义成 .Net 项目模板
artizan-abp 系列目录
Artizan-Abp: Abp 扩展库
Artizan-MsOnAbp:一个基于 ABP 的微服架构,开箱即用
Artizan-MsOnAbp:将其自定义成 .Net 项目模板
售价
¥198,包含源码:
- Artizan-Abp: Abp 扩展库
- Artizan-MsOnAbp: 一个基于 ABP 的微服架构,开箱即用
需要者可私信,并说明来意。
需求背景
Artizan-MsOnAbp 项目信息如下:
目录结构:
解决方案:
其内部还有一些小项目,比如微服务:services\administration
解决方案:
微服务:services\administration:
我们希望以此项目为模板,创建一个以:IotPlatform 为前缀的项目,如下所示:
目录结构:
解决方案:
Artizan-MsOnAbp:.Net 自定义项目模板
参考资料:创建项目模板
下面将介绍如何以项目:Artizan-MsOnAb (artizan-abp-microservice)为模板,创建一个 .Net 自定义项目模板。
创建模板的目录结构
首先,创建文件夹 templates,所有的项目模板将保存于此。
执行如下命令,从 gitee 下载 artizan-abp-microservice 项目代码,
git clone git@gitee.com:Artisan-k/artizan-abp-microservice.git
其中项目 artizan-abp-microservice
的目录结构如下:
├── artizan-abp-microservice // artizan-abp-microservice 项目
├── apps
├── gateways
├── services
├── LICENSE.md 存放版权许可信息,如果不添加,后边会警告
├── ...
└── MsOnAbp.sln
提示:
之所以使用 git clone 是过滤掉不必要的文件和文件夹,比如: bin文件,node_modles,若使用本地文件,还得清理这些文件和文件夹,影响本地开发。
然后把项目 artizan-abp-microservice
代码放到 templates
目录下,并目录templates/artizan-abp-microservice
中新建 /content
文件夹,
再并把项目代码移动该目录下,至此目录结构如下:
├── templates // 用来存放所有的模板
│ ├── artizan-abp-microservice // artizan-abp-microservice 模板全部内容
│ │ ├── content // 存放项目代码和文件
│ │ │ ├── apps
│ │ │ ├── gateways
│ │ │ ├── services
│ │ │ ├── LICENSE.md 存放版权许可信息,如果不添加,后边会警告
│ │ │ ├── ...
│ │ │ └── MsOnAbp.sln
template.json
创建文件夹templates\artizan-abp-microservice\content\.template.config
,
注意:这是一个以点号为开头的文件夹
然后在其中创建名为:template.json
用于定义模板的配置文件,并修改其内容为:
{
"$schema": "http://json.schemastore.org/template",
"author": "majiangfang",
"classifications": ["Artizan", "ABP", "Microservice"],
"identity": "Artizan.Abp.Microservice.Template",
"sourceName": "MsOnAbp",
"name": "Artizan ABP Microservice Template",
"description": "This template provides a simple microservices template with Artizan Abp.",
"tags": {
"language": "C#",
"type": "solution"
},
"shortName": "artizan-abp-ms",
"preferNameDirectory": true
}
详细信息可以查看官网 :https://docs.microsoft.com/zh-cn/dotnet/core/tools/custom-templates
到目前为止,目录结构如下:
├── templates // 用来存放所有的模板
│ ├── artizan-abp-microservice // artizan-abp-microservice 模板全部内容
│ │ ├── content // 存放项目代码和文件
│ │ │ ├── .template.config
│ │ │ └── template.json
│ │ │ ├── apps
│ │ │ ├── gateways
│ │ │ ├── services
│ │ │ ├── LICENSE.md 存放版权许可信息,如果不添加,后边会警告
│ │ │ ├── ...
│ │ │ └── MsOnAbp.sln
安装本地模板
然后执行如下命令,安装本地模板:
> dotnet new install F:\05-workspace\dev\01-lab\abp-framework\templates\artizan-abp-microservice
将安装以下模板包:
F:\05-workspace\dev\01-lab\abp-framework\templates\artizan-abp-microservice
成功: F:\05-workspace\dev\01-lab\abp-framework\templates\artizan-abp-microservice 已安装以下模板:
模板名 短名称 语言 标记
--------------------------------- -------------- ---- ---------------------------
Artizan ABP Microservice Template artizan-abp-ms [C#] Artizan/Abp/Microservice
注意:短名称:artizan-abp-ms,后面我们将使用它来生成项目
NOTE:
1.可以使用如下命令查询指定的模板:dotnet new list artizan-abp-ms
2.执行如下命令卸载模板,
dotnet new uninstall F:\05-workspace\dev\01-lab\abp-framework\templates\artizan-abp-microservice
前提是:本地项目没有被删除。
使用本地模板生成项目
使用本地模板的短名称:artizan-abp-ms 来生成项目,执行如下命令,生成一个以:IotPlatform 为前缀的项目:
> dotnet new artizan-abp-ms -n IotPlatform
已成功创建模板“Artizan ABP Microservice Template”。
生成的项目如下:
其内部的一些小项目,比如微服务:services\administration
解决方案结构:
其内部的一些小项目,比如微服务:services\administration
发布项目模板到 Nuget
参考资料:
- 创建模板包
- https://learn.microsoft.com/zh-cn/dotnet/core/tools/custom-templates
- .NET 示例 GitHub 存储库中查看已完成的模板
添加 nuspec 文件
在 content 文件夹的同级目录下添加名为 Artizan.Abp.Microservices.Template.nuspec 文件, 到目前为止,目录结构如下:
├── templates // 用来存放所有的模板
│ ├── artizan-abp-microservice // artizan-abp-microservice 模板全部内容
│ │ ├── content // 存放项目代码和文件
│ │ │ ├── .template.config
│ │ │ └── template.json
│ │ │ ├── apps
│ │ │ ├── gateways
│ │ │ ├── services
│ │ │ ├── LICENSE.md 存放版权许可信息,如果不添加,后边会警告
│ │ │ ├── ...
│ │ │ └── MsOnAbp.sln
│ │ ├── Artizan.Abp.Microservice.Template.nuspec
nuspec 文件是 XML 清单文件,用于描述包内容,并促进创建 NuGet 包。
Artizan.Abp.Microservice.Template.nuspec 的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Artizan.Abp.Microservice.Template</id>
<version>8.1.0</version>
<description>This template provides a simple microservices template with Artizan Abp.</description>
<authors>majiangfang</authors>
<packageTypes>
<packageType name="Template" />
</packageTypes>
</metadata>
</package>
说明:
- version:当要发布新版本时,记得修改配置节点
version
中的版本号。
下载 Nuget.exe
从 NuGet Gallery | Downloads 下载 nuget.exe 文件, 然后把它放到 templates 目录下的 tools 文件夹里,到目前为止,目录结构如下:
├── templates // 用来存放所有的模板
│ ├── artizan-abp-microservice // artizan-abp-microservice 模板全部内容
│ │ ├── content // 存放项目代码和文件
│ │ │ ├── .template.config
│ │ │ └── template.json
│ │ │ ├── apps
│ │ │ ├── gateways
│ │ │ ├── services
│ │ │ ├── LICENSE.md 存放版权许可信息,如果不添加,后边会警告
│ │ │ ├── ...
│ │ │ └── MsOnAbp.sln
│ │ ├── Artizan.Abp.Microservice.Template.nuspec
├── tools
│ ├── nuget.exe
生成 Nupkg 包
在 nuget.exe 所在目录打开 CMD ,执行如下命令进行打包:
...\templates\tools> nuget pack ..\artizan-abp-microservice\Artizan.Abp.Microservice.Template.nuspec
正在尝试从“Artizan.Abp.Microservice.Template.nuspec”生成包。
......
已成功创建包“F:\05-workspace\dev\01-lab\abp-framework\templates\tools\Artizan.Abp.Microservice.Template.8.1.0.nupkg”。
创建成功后,会在 nuget.exe
所在目录下生成一个名为:Artizan.Abp.Microservice.Template.8.1.0.nupkg 的文件,如下目录结构所示:
├── templates // 用来存放所有的模板
│ ├── artizan-abp-microservice // artizan-abp-microservice 模板全部内容
│ │ ├── content // 存放项目代码和文件
│ │ │ ├── .template.config
│ │ │ └── template.json
│ │ │ ├── apps
│ │ │ ├── gateways
│ │ │ ├── services
│ │ │ ├── LICENSE.md 存放版权许可信息,如果不添加,后边会警告
│ │ │ ├── ...
│ │ │ └── MsOnAbp.sln
│ │ ├── Artizan.Abp.Microservice.Template.nuspec
├── tools
│ ├── nuget.exe
│ ├── Artizan.Abp.Microservice.Template.8.1.0.nupkg
发布模板包到 Nuget
在 Artizan.Abp.Microservice.Template.8.1.0.nupkg 所在目录下打开 CMD 或者 Powershell, 执行如下命令,发布到Nuget
- 发布到私有 Nuget:
> dotnet nuget push Artizan.Abp.Microservice.Template.8.1.0.nupkg -s https://localhost:5657/v3/index.json --api-key "123456"
- 发布到官方 Nuget:
> dotnet nuget push Artizan.Abp.Microservice.Template.8.1.0.nupkg -s https://api.nuget.org/v3/index.json --api-key "xxxxx"
参数说明:
- 参数
-s
: 用于指定 Nuget 源,当发布到官方 Nuget,参数-s https://api.nuget.org/v3/index.json
可以省略; - 参数
--api-key
: 用于指定上传包时需要的 API key。
这里我们发布到私有 Nuget,执行结果如下:
...\templates\tools>dotnet nuget push Artizan.Abp.Microservice.Template.8.1.0.nupkg -s https://localhost:5657/v3/index.json --api-key "123456"
正在将 Artizan.Abp.Microservice.Template.8.1.0.nupkg 推送到 'https://localhost:5657/api/v2/package'...
PUT https://localhost:5657/api/v2/package/
Created https://localhost:5657/api/v2/package/ 864 毫秒
已推送包。
可以在私有的 Nuget 中查看上传结果,如下图所示:
安装项目模板
执行如下命令,将项目模板安装到本地:
> dotnet new install Artizan.Abp.Microservice.Template::8.1.0 --nuget-source https://localhost:5657/v3/index.json
- 参数
::<版本号>
: 用于指定版本,::8.1.0
表示8.1.0
版本; - 参数
--nuget-source
:用于指定 Nuget 源,当Nuget 源是官方 Nuget 时,该参数可以省略。
执行结果如下:
PS C:\Users\wei> dotnet new install Artizan.Abp.Microservice.Template::8.1.0 --nuget-source https://localhost:5657/v3/index.json
将安装以下模板包:
Artizan.Abp.Microservice.Template::8.1.0
成功: Artizan.Abp.Microservice.Template::8.1.0 已安装以下模板:
模板名 短名称 语言 标记
--------------------------------- -------------- ---- ----------------------------
Artizan Abp Microservice Template artizan-abp-ms [C#] Artizan/Abp/Microservice
可执行如下命令查询指定的模板:
PS C:\Users\wei> dotnet new list artizan-abp-ms
这些模板已匹配你的输入: 'artizan-abp-ms'
模板名 短名称 语言 标记
--------------------------------- -------------- ---- ----------------------------
Artizan Abp Microservice Template artizan-abp-ms [C#] Artizan/Abp/Microservice
使用模板生成项目
使用本地模板的短名称:artizan-abp-ms 来生成项目,执行如下命令,生成一个以:IotPlatform 为前缀的项目:
> dotnet new artizan-abp-ms -n IotPlatform
已成功创建模板“Artizan ABP Microservice Template”。
卸载项目模板
可执行如下命令卸载模板:
> dotnet new uninstall Artizan.Abp.Microservice.Template
成功: Artizan.Abp.Microservice.Template::8.1.0 已卸载。
使用脚本打包发布
上述步骤中的打包和发布已经写成一系列脚本,具体详情及其使用方法,参见 nupkg\README.md
文件
基于模板快速开发
使用模板创建新建的解决方案:
> dotnet new artizan-abp-ms -n WarehouseMs
已成功创建模板“Artizan ABP Microservice Template”。
如果解决方案 WarehouseMs 是通过源码的方式引用依赖类库 artizan-abp ,故需要处理好它们的目录层级结构。
解决方案 WarehouseMs 与依赖类库 Artizan-Abp 源码的目录层级关系如下所示:
artizan-abp
├── framework # 框架
├── modules # 主目录
│ ├── account # account 模块
│ ├── identity # identity 模块
│ ├── ... # 其它 module
│
├── build # 所有项目编译、发布脚本
│ │ ├── common.ps1 # 配置脚本,主要配置将要编译、发布的项目目录
│ │ ├── build-all.ps1 # 项目编译脚本
│ │ └── build-all-release.ps1 # 项目发布脚本
│ │
├── nupkg # nuget 相关文件
│ │ ├── common.ps1 # 配置脚本,主要配置将要打包的项目(根)目录
│ │ ├── pack.ps1 # 脚本:批量打包
│ │ └── push_packages.ps1 # 脚本:批量上传包
│ └── ...
│
artizan-abp-projects
│ ├── microservice # 微服务架构
│ │ ├── apps # 应用程序
│ │ ├── gateways # 网关
│ │ ├── services # 微服务
│ │ ├── tye.yaml # tye 配置,用于 tye run
│ │ ├── ...
│ │ └── MsOnAbp.sln # 解决方案
│ │
│ ├── n-layered # 分层架构
│ │ ├── ...
│ │
│ ├── single # 单体架构
│ │ ├── ...
│
projects
│ ├── P01-WarehouseMs # WarehouseMs(微服务架构)
│ │ ├── apps # 应用程序
│ │ ├── gateways # 网关
│ │ ├── services # 微服务
│ │ ├── tye.yaml # tye 配置,用于 tye run
│ │ ├── ...
│ │ └── WarehouseMs.sln # 解决方案
│ │
│ ├── P0X-Xxx # 其它项目
│ │ ├── ...
提示:
从 Artizan-MsOnAbp 8.0.0 版本开始,已经将依赖类库 Artizan-Abp 的方式:从引用源码修改为引用 Nuget ,故可以不强制满足上述的目录层级结构
使用 ABP CLI 创建新的微服务:WarehouseMs.WarehouseService(ABP Module):
> abp new WarehouseMs.WarehouseService -t module --no-ui --database-provider ef -dbms MySQL --connection-string "Server=localhost;Port=3306;Database=WarehouseMs_WarehouseService;Uid=root;Pwd=123456;" --version 7.2.2 --output-folder ./services/warehouse
执行如下命令,将新建的微服务的 HttpApi.Host 项目加入总的解决方案 WarehouseMs.sln :
> dotnet sln WarehouseMs.sln add ./services/warehouse/src/WarehouseMs.WarehouseService.HttpApi.Host -s services
在 tye.yaml 文件中添加如下配置,以便能够使用 Tye 启动新增的微服务
name: WarehouseMs
services:
......
- name: warehouse-service
project: services/warehouse/src/WarehouseMs.WarehouseService.HttpApi.Host/WarehouseMs.WarehouseService.HttpApi.Host.csproj
bindings:
- protocol: http
port: 44390
......
在微服务 IdentityService 中添加如下种子数据:
添加新的微服务对应的 Scope, 并为 Swagger Client 添加此 Scope 的访问权限:
然后为 Backend Admin Client 添加微服务对应的 Scope 的访问权限:
在内部网关【WarehouseMs.WebGateway】项目中添加网关路由:
在后台管理编写微服务管理界面
下面是订单图例:
参考资料
从壹开始前后端分离 39 || 想创建自己的dotnet模板么?看这里 - 老张的哲学 - 博客园 (cnblogs.com)
创建模版包
.NET5 自定义项目模板
CREATING DOTNET SOLUTION AND PROJECT TEMPLATES