首页 > 编程语言 >asp.net core 将整个解决方案打包,做成脚手架,可直接安装使用

asp.net core 将整个解决方案打包,做成脚手架,可直接安装使用

时间:2023-09-22 12:45:08浏览次数:46  
标签:core asp 目录 nuget template dotnet net 我们 模板

自己经过多年开发的沉淀后,开发出一个属于自己的一套Demo项目,亦或是借鉴别人的项目后,优化了一个,然后我们在别的地方使用的时候(可能是下一个公司),如果还想用自己的模板,也可能是供新入职的同事使用,经常会是以下几个办法

 

1、对比着之前的项目结构,在VistulStudio中手动创建一个空的解决方案,从零开始,一点一点搭建。// 麻烦之大,可想而知

2、通过dotnet cli 命令来创建空项目,然后手动。// 会简化一丢丢,但仍需要一层一层的创建类库;

3、把Demo工程代码里拷贝到U盘,或者上传到云盘,然后下载下来,改吧改吧。// 寻找过程很麻烦,依赖代码承载工具;

4、把Demo工程代码 Pull 到 Github 上,在别的地方直接 Clone ,然后改吧改吧。 // 开源出源码,私密性不强;

 

 大家可以看到,上边的这几个办法,都会有这样或那样的问题,快的不方便,方便的太局限。而且上边的这些都有一个通病,不知道大家是否发现:就是不能快速修改工程名称!手动修改,可能还碰到不少问题。

所以创建一个公司通用型的项目脚手架,是很有必要的,可以节省 团队很多的时间。

==================================================================

下面就重点介绍怎么来创建

1、我们在任意位置新建一个目录来使用,比如我在F盘新增目录叫做template

然后我们采用dos命令进入这个文件夹,可以打开这个文件夹,在上面路径中,输入cmd回车,就可以了,比如:

 这样,我们就进入了template目录

2、我们需要引入模板包,执行以下命令

dotnet new install Microsoft.TemplateEngine.Authoring.Templates

3、我们用这个模板包创建一个模板,模板名称我们自定义,建议跟想要命名的包名一致就行。

dotnet new templatepack --output "FeiAbpTemplate"

执行上述这个命令,会帮我们创建一个工程。

 

 我们可以看到,这个命令帮我们创建了一个文件夹,里面有一个工程文件和content目录以及readme.md 文件,readme文件大家自己编辑,主要是项目说明,这里不再叙述。

4、我们打开那个.csproj的工程文件,用记事本,vscode都行,我们要根据提示编辑这个文件

 

 

 

5、下面,我们就将我们的项目目录复制到content 目录下

 我将整个解决方案目录都复制过来了,打开给大家看下结构

 这就是我要放到脚手架上的所有项目内容了。

6、我们在项目目录demo下,新建一个 .template.config 文件夹,注意,是有一个点开头的,是文件夹,在这个文件夹下,我们

新建一个文件template.json 文件,注意,文件名称不能改。都是固定的。内容如下:

{
    "author": "huangminghui", 
    "classifications": [ "Web/WebAPI" ], //必须,这个对应模板的Tags
    "name": "Demo", //必须,这个对应模板的Templates
    "identity": "feiabptemplate", //可选,模板的唯一名称
    "shortName": "feiabptemplate", //必须,这个对应模板的Short Name
    "tags": {
      "language": "C#" ,
      "type":"project"
    },
    "sourceName": "Demo",  // 可选,要替换的名字
    "preferNameDirectory": true  // 可选,添加目录  
}

author,就是作者名,自己随便定义

classifications,也是自己随便定义分类

name,一般对应我们复制进来的项目名称

identity,标识,一般取我们的包名

shortName,短名称,后面采用安装命令时有用,一般与identity一致就行,除非identity特别难记,那可以定义一个简短的。

sourceName,要配置,这个就会帮我们替换原有项目模板的项目名称。即有以demo命名的项目名称,文件名称,命名空间都会替换成我们指定的名称。

 

其他可不动。

 

7、接下来,我们就要生成nuget包了

我们进入FeiAbpTemplate 目录,执行以下命令

dotnet pack

 如图所示,我们就生成成功了。

 自动帮我们生成了bin/debug目录,并生成了nupkg的文件。

 

8、我们登录nuget官网

https://www.nuget.org/

没账号的自己注册一个哈

 我们上传刚才生成的这个nuget包

 

文件上传后,直接点submit提交,然后等待审核。

 9、接下来,我们在任意一个目录下,开是安装这个项目

比如我在template目录下运行命令

dotnet new install FeiAbpTemplate

实例化这个包,如果有多个版本,请增加版本号(如上截图中nuget显示的写法),否则将使用最新版。

 可以看到我们已经初始化了这个nuget包,里面有模板,短名称是kydemo4

这个名称是对应我们刚才项目中配置的

发现我刚配置的没保存,信息还是旧的,但这个不影响。只是名称不一样而已。

我最终提交到nuget时的template.json 是这样的

{
    "author": "huangminghui", 
    "classifications": [ "Web/WebAPI" ], //必须,这个对应模板的Tags
    "name": "Demo", //必须,这个对应模板的Templates
    "identity": "KYDemo4", //可选,模板的唯一名称
    "shortName": "kydemo4", //必须,这个对应模板的Short Name
    "tags": {
      "language": "C#" ,
      "type":"project"
    },
    "sourceName": "Demo",  // 可选,要替换的名字
    "preferNameDirectory": true  // 可选,添加目录  
}

 

然后创建项目,这时候我们就用短名称  kydemo4

执行以下命令

dotnet new kydemo4 --name KYMall

这时候就给我们创建好项目了

 

如果不加name 参数,则默认以上一级文件夹的名称作为项目名称。

 

这样,整个脚手架的创建应用就完成了。

可以下下来直接开发用了

参考文档:

https://learn.microsoft.com/zh-cn/dotnet/core/tutorials/cli-templates-create-template-package?pivots=dotnet-8-0

https://learn.microsoft.com/zh-cn/dotnet/core/tutorials/cli-templates-create-project-template

https://www.cnblogs.com/huguodong/p/12930875.html

注我的个人公众号,每日更新,获取更多技术知识

 

标签:core,asp,目录,nuget,template,dotnet,net,我们,模板
From: https://www.cnblogs.com/fei686868/p/17722056.html

相关文章

  • COMP3322 notes P1 - Internet & WWW Basic
    选这门课完全是为了推进我博客美化的大业!希望学完之后updatelogs里的一部分issues能自己亲手解决。首先来到InternetandWWWbasic:这些基本的network知识对接下来的front-endframework学习大有裨益。Internet,Web,DNS,HTTP等「最熟悉的陌生人」在这一节得以祛......
  • ZWCAD 自动加载net DLL程序,并加载菜单
    WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SOFTWARE\ZWSOFT\ZWCADM\2018\zh-CN\Applications\AutoCADADDIN]"DESCRIPTION"="""LOADCTRLS"=dword:0000000d"LOADER"="D:\\Users\\ZWCAD\\AutoCADADD......
  • 使用MediatR库简化.NET应用程序中的CQRS实现
    本文介绍了如何使用MediatR库简化.NET应用程序中CQRS(命令查询职责分离)模式的实现。我们将通过一个具体的业务场景来演示如何使用MediatR库,以及它带来的好处。引言CQRS(命令查询职责分离)是一种架构模式,它将一个对象的命令操作(例如创建、更新和删除)与查询操作(如读取和搜索)分离开来......
  • 在.NET应用程序中实现领域驱动设计(DDD)
    本文介绍了如何在.NET应用程序中实现领域驱动设计(DDD),以便更好地应对复杂业务需求。我们将介绍DDD的核心概念,并通过一个具体的业务场景演示如何在实践中应用这些概念。引言在开发具有复杂业务需求的应用程序时,我们需要确保我们的代码能够灵活地应对变化。领域驱动设计(DDD)是一种方......
  • Cannot initiate the connection to cn.archive.ubuntu.com:80 (2403:2c80:5::6). - c
     版本:ubuntu22.04 Cannotinitiatetheconnectiontocn.archive.ubuntu.com:80(2403:2c80:5::6).-connect(101:Networkisunreachable) 嗯,被墙了。找到/etc/apt/source.list替换里面的源为清华源 ubuntu|镜像站使用帮助|清华大学开源软件镜像站|Tsinghu......
  • netbeans19常用快捷方式
    Ctrl+Shift+1在项目窗口中选中当前文件Ctrl+Shift+2在文件窗口中选中当前文件Ctrl+X在编辑器中删除当前光标所在的行Ctrl+/开关注释Ctrl+Shift+方向上下键向上/下复制当前光标所在行或者选中的多行Alt+Shift+方向上下键向上/下移动当前光标所在行或......
  • 工控机连接Profinet转Modbus RTU网关与水泵变频器Modbus通讯
    Profinet转ModbusRTU网关是一个具有高性能的通信设备,它能够将工控机上的Profinet协议转换成水泵变频器可识别的ModbusRTU协议,实现二者之间的通信。通过这种方式,工控机可以直接控制水泵变频器的运行状态,改变其工作频率,从而实现对水泵的精确控制。工控机连接Profinet转ModbusRTU......
  • Profinet转Modbus RTU网关连接PLC与多功能电表modbus通讯
    Profinet是一种工业以太网通讯协议,广泛用于工业自动化系统中。而ModbusRTU是一种串行通信协议,常用于PLC和仪表之间的通讯。Profinet转ModbusRTU网关(XD-MDPN100)的作用就是将Profinet协议转换为ModbusRTU协议,从而实现PLC和多功能电表之间的通讯。在工业自动化系统中,PLC常常需......
  • Stable Diffusion基础:精准控制之ControlNet
    在AI绘画中精确控制图片的生成是一件比较困难的事情,炼丹师们经常需要大量抽卡才能得到一张满意的图片,不过随着ControlNet的诞生,这一问题得到了很大的缓解。ControlNet提供了十几种控制网络模型,有的可以控制画面的结构,有的可以控制人物的姿势,还有的可以控制图片的画风,这对于提......
  • 工控机通过Profinet转Modbus RTU网关与报警控制仪通讯案例
    本文将以工控机通过Profinet转ModbusRTU网关(XD-MDPN100)与报警控制仪通讯的实际案例为例,介绍Profinet转ModbusRTU网关(XD-MDPN100)在工业通信的应用。在某个生产车间的报警系统中,报警控制仪是起到监测和控制作用的关键设备。由于生产车间内设备众多,且距离较远,无法直接通过ModbusR......