场景:日常工作中,你可能会碰到需要新建一个全新的解决方案的情况(如公司新起了一个新项目,需要有全新配套的后台程序),如果公司内部基础框架较多、解决方案需要DDD模式等,那么从新起项目到各种依赖引用到能实际可用,一大堆的配置都需要重新设定、测试,耗时耗力,根据项目的大小,往往可能需要 1-2 小时甚至更久。

在 .net core 之前,虽然有相关的解决方法可以实现“项目模板”这个需求,但在具体操作时很不方便,从 .net core 1.0 开始,提供了“模板引擎”,增加了 dotnet new --install(-i) 命令和选项,通过该命令,可以让你方便的创建属于你自己的项目模板。

本文原始地址:https://blog.zhuliang.ltd/2019/07/net-core/custom-template-using-dotnetcore.html

通过本文你可以了解和掌握:

  1. 掌握如何将一个现有解决方案中的项目作为项目模板。

    1. 掌握如何在本地创建项目模板并安装和使用。
    2. 掌握如何将本地模板打包成 nuget 包,并通过包 id 进行安装使用该模板。
  2. 了解、掌握简单的 dotnet 和 nuget 命令及其配置。(windows 和 mac 会做差异说明)

准备工作

本次项目结构如下(DDD):

你可以在我的 github 库:https://github.com/ArtechChu/Template 直接下载该模板源码

  • 用于发布的项目一共两个,Template.Console 和 Template.WebApi

    • 其中 Console 项目就是简单的引用了下其他项目进行输出。
    • WebApi 项目简单配置了下依赖注入,你可以将此项目作为 api 模板项目来说

Console 项目概要:

WebApi 项目概要:

将本地项目作为本地模板,通过命令进行安装和使用

  1. 本次示例以 Console 为例,将控制台项目涉及到的项目拷贝一份到如下文件夹中:

  2. 手动创建一个名为“.template.config”的文件夹,并在该文件夹内创建文件:template.json

    {
    "$schema": "http://json.schemastore.org/template",
    "author": "Artech",
    "classifications": [ "Console" ],
    "name": "Custom Console",
    "identity": "Custom Console", //模板唯一标识
    "groupIdentity": "Custom Console",
    "shortName": "CustomConsole", //【修改】短名称,使用 dotnet new <shortName> 安装模板时的名称
    "tags": {
    "language": "C#",
    "type": "project"
    },
    "sourceName": "Template", //【修改】在使用 -n 选项时,会替换模板中项目的名字
    "preferNameDirectory": true
    }
    • 这里主要说明下 shortName 和 sourceName 这 2 个属性。

      • shortName:短名称,用于在使用“dotnet new -l”命令时显示,安装时也可直接根据该短名称进行安装。
      • sourceName:当我们在使用"dotnet new" 命令进行安装时,如果指定了 -n 或者 -o 选项,那么选项后面的名字会自动替换 sourceName 中指定的名字,因为我们的项目命名规则是 "Template.XXXX",所以这里设定为“Template”,如果你的项目命名规则是“公司.项目.XXX”,那么这里请设定为“公司.项目”。
  3. 安装该模板到本地模板库

    # 通过如下命令查看当前本机已安装模板:
    dotnet new -l

    # 模板安装命令:dotnet  new  i <path | nugetId>
    # 这里因为是安装本地模板,直接使用路径(绝对和相对均可)
    dotnet new -i .

  4. 安装该短名称为 CustomConsole 的模板

    假定安装路径为 D:\TestTemplate

    假定新起的项目名为“Company.Group”

    # 这里使用 -n 和 -o 选项来分别指定新项目的名字以及输出目录
    # 设定新项目的名字为“Company.Group”,因为当前定位已经在 TestTemplate 文件夹内,所以直接用“.”,如下:
    dotnet new CustomConsole -n Company.Group -o .

    文件夹内容如下:

    • 使用模板新建的项目文件夹自动为“Company.Group.XXXX”

    测试:

    更多关于 template.json 的说明请参考:http://json.schemastore.org/template

    • 在 template.json 中,你还可以指定 symbols 等,来实现更多的自定义功能,如联动预编译指令等等。

将本地项目打包为 nuget 包,并通过命令进行安装和使用

本次示例以 Console +WebApi 为例,在 Templates\Nuget 文件夹中,建立 Content 文件夹用于存放 nuget 包内容,具体如下:

  • ConsoleTemplate 中的 .template.config\template.json 内容同上方 Console 示例。

  • WebApiTemplate 中的 .template.config\template.json 内容如下:

    {
    "$schema": "http://json.schemastore.org/template",
    "author": "Artech",
    "classifications": [ "WebApi" ],
    "name": "Custom WebApi",
    "identity": "Custom WebApi",
    "groupIdentity": "Custom WebApi",
    "shortName": "CustomWebApi",
    "tags": {
    "language": "C#",
    "type": "project"
    },
    "sourceName": "Template",
    "preferNameDirectory": true
    }
  1. 在 content 目录内创建一个 nuspec 文件:Custom.Template.NetCore.nuspec,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
    <metadata>
    <id>Custom.Template.NetCore</id>
    <version>1.0.1</version>
    <description>
    Custom Template, including WebApi, Console
    </description>
    <authors>Artech</authors>
    <packageTypes>
    <packageType name="Template" />
    </packageTypes>
    </metadata>
    </package>
    • 需要注意,packageType 为 Template,metadata.id 必须保证唯一,其他按需设置即可。
    • 必须是在 content 文件夹内。nuget 在打包的时候,是根据 content 文件夹来进行的。
  2. 使用 nuget pack 命令打包

    # 注意路径的相对位置
    nuget pack Custom.Template.NetCore.nuspec -OutputDirectory .

  • 打包后的内容为:

  1. 发布该 nuget 包到 nuget server

    这里用的是自建 nuget server,你可以按自身情况打包上传。

    • 你可以直接使用 Nuget Package Explorer 进行发布包
    • 也可以使用 nuget push 来发布,如下:
    nuget push Custom.Template.NetCore.1.0.1.nupkg -Source "你的nuget 服务 url" -ApiKey "你的nuget api key"
  2. 通过 nuget 安装模板到本地

  • 安装前本地已经安装的模板如下:

  • 安装

    dotnet new -i Custom.Template.NetCore::*

  1. 通过模板安装 CustomWebApi

    安装路径为:D:\TestWebApiTemplate

    dotnet  new  CustomWebApi  -n  Company.Group  -o  .
  2. 创建一个解决方案,并将所有的项目添加到解决方案 Company.Group.sln 中

    dotnet new sln -n Company.Group
    # windows 下无法使用 glob pattern 只能逐个添加
    dotnet sln Company.Group.sln add Company.Group.Application\Company.Group.Application.csproj
    dotnet sln Company.Group.sln add Company.Group.Domain\Company.Group.Domain.csproj
    dotnet sln Company.Group.sln add Company.Group.DomainService\Company.Group.DomainService.csproj
    dotnet sln Company.Group.sln add Company.Group.IApplication\Company.Group.IApplication.csproj
    dotnet sln Company.Group.sln add Company.Group.IDomainService\Company.Group.IDomainService.csproj
    dotnet sln Company.Group.sln add Company.Group.Infrastructure.CrossCutting\Company.Group.Infrastructure.CrossCutting.csproj
    dotnet sln Company.Group.sln add Company.Group.Repository\Company.Group.Repository.csproj
    dotnet sln Company.Group.sln add Company.Group.WebApi\Company.Group.WebApi.csproj

    如果你用的是 mac / linux ,则可以直接用 globbing pattern 来添加,如下:

    dotnet sln Company.Group.sln add **/*.csproj

参考

https://devblogs.microsoft.com/dotnet/how-to-create-your-own-templates-for-dotnet-new/

https://github.com/dotnet/dotnet-template-samples

https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-new?tabs=netcore22

https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools

使用 .NET CORE 创建 项目模板,模板项目,Template的更多相关文章

  1. 使用 DotNet CLI 创建自定义的 WPF 项目模板

    描述 当我们安装完 DotNetCore 3.0 版本的 SDK 后,我们就可以创建基于 DotNetCore 的 WPF 项目模板,通过如下 CLI 可以方便快捷的创建并运行我们的项目: dotne ...

  2. django之创建第4个项目编写第一个动态模板文件

    修改的地方: 1.index.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  3. django之创建第3个项目:编写第一个模板文件

    1.django结构 2.在站点blog下创建templates文件夹,专门用于存放模板文件 3.在templates文件夹下创建index.html文件 #index.html <!DOCTY ...

  4. dya49:django:wsgrief&模板渲染Jinjia2&django的MTV/MVC框架&创建/启动一个django项目

    目录 1.自定义web框架wsgiref版 2.自定义web框架wsgiref版-优化版 3.模板渲染JinJa2 4.MTV和MVC框架 5.django:下载安装&创建启动 自定义web框 ...

  5. maven archetype生成自定义项目原型(模板)

    maven archetype可以将一个项目做成项目原型,之后只需要以此原型来创建项目,那么初始创建的项目便具有原型项目中的一切配置和代码.通俗讲就是一个项目模板. eclipse中那些快速生成mav ...

  6. Sitecore CMS中更改项目的模板

    如何在Sitecore CMS中创建项目后更改项目的模板. 在创建项目时选择了错误的模板,或者创建了新模板并将现有项目更新为新模板时,这非常有用.   警告! 更改模板时要小心.如果原始模板具有不在新 ...

  7. Django项目中模板标签及模板的继承与引用【网站中快速布置广告】

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...

  8. 通过例子进阶学习C++(七)CMake项目通过模板库实现约瑟夫环

    本文是通过例子学习C++的第七篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 回顾一下约瑟夫环问题:n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然 ...

  9. Maven用项目模板生成项目

    Archetype插件是Maven生成项目的项目模板,项目模板就是一个框,把文件夹这些定好,然后就可以在上开写具体逻辑等等. 最常用的命令: mvn archetype:generate 这个是生成一 ...

随机推荐

  1. spring mvc重定向问题

    在页面提交时中,路径应该使用“/默认上下文/controller路径”,在controller重定向中,应该使用“/controller路径”,不加上下文.

  2. MyBatis 使用枚举或其他对象

    From<Mybatis从入门到精通> 1.笔记: <!-- 6.3 使用枚举或者其他对象 6.3.1 使用MyBatis提供的枚举处理器 不懂: 因为枚举除了本身的字面值外,还可以 ...

  3. Lake Counting-C++

    Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...

  4. Java中lambda表达式详解

    原文地址:http://blog.laofu.online/2018/04/20/java-lambda/ 为什么使用lambda 在java中我们很容易将一个变量赋值,比如int a =0;int ...

  5. zabbix 支持的主要监控方式

    zabbix 支持的主要监控方式 一.zabbix支持的主要监控方式: zabbix主要Agent,Trapper,SNMP,JMX,IPMI这几种监控方式,本文章主要通过监控理论和实际操作测试等方式 ...

  6. 必懂的webpack高级配置

    webpack高级配置 1.HTML中img标签的图片资源处理 使用时.只需要在html中正常引用图片即可.webpack就会找到对应的资源进行打包.并修改html中的引用路径 主要是将html中的i ...

  7. 搭建python环境

    参考文章:https://blog.csdn.net/qq_33855133/article/details/73106176 对于配置环境变量,懂些技术的人来说,都是很简单. 变量是在操作系统中一个 ...

  8. SpringMVC表单对象绑定到@ModelAttribute

    支持绑定表单对象 jsp: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/fo ...

  9. Java集合 HashSet的原理及常用方法

    目录 一. HashSet概述 二. HashSet构造 三. add方法 四. remove方法 五. 遍历 六. 合计合计 先看一下LinkedHashSet 在看一下TreeSet 七. 总结 ...

  10. SpringBoot日志相关

    SpringBoot使用的是SLF4j当门面,Logback当实现完成 日志级别 数字越大,级别越高,框架只会输出大于等于当前日志级别的信息 ERROR 40 WARN 30 INFO 20 DEBU ...