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 为前缀的项目,如下所示:
目录结构
1686564565137

解决方案
1686564565137

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”。

生成的项目如下:

1686564565137

其内部的一些小项目,比如微服务:services\administration

1686564565137

解决方案结构:

1686564565137

其内部的一些小项目,比如微服务:services\administration
1686564565137

发布项目模板到 Nuget

参考资料:

添加 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"
> 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
1686564565137 1686564565137

执行如下命令,将新建的微服务的 HttpApi.Host 项目加入总的解决方案 WarehouseMs.sln

> dotnet sln WarehouseMs.sln add ./services/warehouse/src/WarehouseMs.WarehouseService.HttpApi.Host -s services
1686564565137

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】项目中添加网关路由:

在后台管理编写微服务管理界面
1686564565137

下面是订单图例:

参考资料

从壹开始前后端分离 39 || 想创建自己的dotnet模板么?看这里 - 老张的哲学 - 博客园 (cnblogs.com)
创建模版包
.NET5 自定义项目模板
CREATING DOTNET SOLUTION AND PROJECT TEMPLATES

posted @ 2023-06-30 07:55  easy5  阅读(163)  评论(3编辑  收藏  举报