使用 .NET CORE 创建 项目模板,模板项目,Template

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

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

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

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

    1. 掌握如何在本地创建项目模板并安装和使用。

    2. 掌握如何将本地模板打包成 nuget 包,并通过包 id 进行安装使用该模板。

  2. 了解、掌握简单的 dotnet 和 nuget 命令及其配置。(windows 和 mac 会做差异说明)

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

你可以在我的 github 库:

640?wx_fmt=png

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

    • 其中 Console 项目就是简单的引用了下其他项目进行输出。

    • WebApi 项目简单配置了下依赖注入,你可以将此项目作为 api 模板项目来说

Console 项目概要:

640?wx_fmt=png

WebApi 项目概要:

640?wx_fmt=png

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

    640?wx_fmt=png

  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:短名称,用于在使用“dotnet new -l”命令时显示,安装时也可直接根据该短名称进行安装。

  • sourceName:当我们在使用"dotnet new" 命令进行安装时,如果指定了 -n 或者 -o 选项,那么选项后面的名字会自动替换 sourceName 中指定的名字,因为我们的项目命名规则是 "Template.XXXX",所以这里设定为“Template”,如果你的项目命名规则是“公司.项目.XXX”,那么这里请设定为“公司.项目”。

  • 这里主要说明下 shortName 和 sourceName 这 2 个属性。

安装该模板到本地模板库


dotnet  new  -l

640?wx_fmt=png

dotnet  new  -i  .

640?wx_fmt=png

安装该短名称为 CustomConsole 的模板

假定安装路径为 D:\TestTemplate

 dotnet   new   CustomConsole   -n   Company.Group   -o   .

640?wx_fmt=png

文件夹内容如下:

640?wx_fmt=png

测试:

640?wx_fmt=png

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

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

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

本次示例以 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 文件夹来进行的。

使用 nuget pack 命令打包


nuget   pack   Custom.Template.NetCore.nuspec   -OutputDirectory   .

640?wx_fmt=png

  • 打包后的内容为:

    640?wx_fmt=png

  1. 发布该 nuget 包到 nuget server

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

    640?wx_fmt=png

    nuget push Custom.Template.NetCore.1.0.1.nupkg -Source "你的nuget 服务 url" -ApiKey "你的nuget api key"
  • 你可以直接使用 Nuget Package Explorer 进行发布包

  • 也可以使用 nuget push 来发布,如下:

通过 nuget 安装模板到本地

  • 安装前本地已经安装的模板如下:640?wx_fmt=png

  • 安装

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

    640?wx_fmt=png

  1. 通过模板安装 CustomWebApi

    安装路径为:D:\TestWebApiTemplate

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

    dotnet new sln -n Company.Groupdotnet 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

    640?wx_fmt=png

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

    640?wx_fmt=png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能

一、前言surging是基于.NET CORE 服务引擎。初始版本诞生于2017年6月份,经过NCC社区二年的孵化,2.0版本将在2019年08月28日进行发布,经历二年的发展,已经全部攘括了微服务架构的技术栈,覆盖了从服务注册、服务发现、中…

奇淫巧技-Flutter调用C#

前言众所周知,Xamarin应该是.net下的跨平台开发工具。2016年之前还处于收费状态,后被微软收购后开源。但似乎有个现象,开源后的Xamarin发展似乎有些停滞,而且维护Xamarin的团队又很固执不愿变通。社区多次建议UI层应该统一绘图引擎…

.NET World——gPRC概览

官方的定义:gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authen…

推荐高质量的公众号,值得跟进学习!

为大家推荐几个高质量的公众号:当你迷茫的时候刷刷这些大公司的牛人所运营的公众号,就可以知道自己的不足,不是仅仅局限于.NET技术之下,通过他们扩展我们的知识宽度,我们可以一起来学习。人工智能爱好者社区专注人工智…

.net core redis的全套操作

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。Redis支持主从同步…

Stack Overflow引入CROKAGE,搜问题不用再东拼西凑

许多开发者使用 Stack Overflow 搜索开发中遇到的问题,有时候需要查询的结果中有通俗的讲解,而且最好还能够带上代码 demo,但是两者同时很完美地满足要求还是比较困难的。不过最近 Stack Overflow 官方博客上介绍了一种智能化的技术&#xff…

使用Kubectl部署应用

目录 使用Kubectl部署应用 Kubectl部署流程 部署一个简单的Demo网站 使用Kubectl部署应用一旦运行了Kubernetes集群,就可以在其上部署容器化应用程序。因此在开始之前,我们需要先确保集群已经准备就绪,无论是使用Minikube还是kubeadm创建的集…

Docker系列之.NET Core入门(三)

在Docker生态系统中除了上一节所讲解的基本概念,还有其他专业术语,本文我们将一笔带过,同时会开始陆续进入到在.NET Core中使用Docker。专业术语Docker Engine(Docker引擎):客户端 - 服务器应用程序。Docke…

通过Blazor使用C#开发SPA单页面应用程序(4) - Ant Design

通过Blazor使用C#开发SPA单页面应用程序(1)通过Blazor使用C#开发SPA单页面应用程序(2)通过Blazor使用C#开发SPA单页面应用程序(3)前面学习了Blazor的特点、环境搭建及基础知识,现在我们尝试的做个实际的组件。Ant Design是蚂蚁金服是基于Ant Design设计体系的 UI 组…

Mercurial黄昏,Bitbucket宣布全面转向Git

源代码托管平台 Bitbucket 宣布将逐步放弃对版本控制系统 Mercurial 的支持。Bitbucket 推出于 2008 年,当时集中式版本控制是比较普遍的,Mercurial 是其中的典型代表,但是当前 Git 才是主流,它已经成为了大部分开源项目的首选版本…

使用 Azure DevTest Lab 搭建云端开发测试环境

点击上方蓝字关注“汪宇杰博客”导语程序员和测试工程师经常需要自己搭环境用于开发和测试目的,这些机器可能只会使用很短一段时间。通常我们会在本机使用 Hyper-V、VMWare 之类的虚拟机产品,或者使用企业IT管理员分配的虚拟机去完成这项工作。然而安装配…

dotNET Core WebAPI 统一处理(返回值、参数验证、异常)

现在 Web 开发比较流行前后端分离现在 Web 开发比较流行前后端分离,我们的产品也是一样,前端使用Vue,后端使用 dotNet Core WebAPI ,在写 API 的过程中有很多地方需要统一处理文档参数验证返回值异常处理本文就说说 API 的统一处理…

.net测试篇之单元测试/集成测试神器Autofixture

autofixture简介有了单元测试框架加上Moq(后面我们会用单独章节来介绍moq),可以说测试问题基上都能搞定了.然而有了AutoFixture对单元测试来说可以说是如虎添翼,AutoFixture并且它能与moq,rhinomock等框架结合,对单元测试带来的便捷性,可维护性和扩展性更是难以言表,只有用用了…

DotNetCore 3.0 助力 WPF本地化

概览随着我们的应用程序越来越受欢迎,我们的下一步将要开发多语言功能。方便越来越多的国家使用我们中国的应用程序,基于 WPF 本地化,我们很多时候使用的是系统资源文件,可是动态切换本地化,就比较麻烦了。实现思路现在…

开源题材征集 + MVCEF Core 完整教程小结

到目前为止,我们的MVCEF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点。下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目。现向园友征集题材,你提需…

对微软的敌视何时休? 从一篇语言评论文章对C#的评价说起

看到一篇公众号文章《2020年什么编程语言最受欢迎,待遇最高?》,其中对C#的描述如下:点击阅读原文,看到这是一篇翻译文章:https://codinginfinite.com/top-programming-languages-2020-stats-surveys/这篇文…

ASP.NET Core on K8S深入学习(6)Health Check

本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。预计阅读时间为10分钟。01—关于K8S中的健康监测所谓Health Check,就是健康检查,即防微杜渐。K8S是一个编排引擎可以帮助我们快捷地部署容器集…

关于 .Net Core runtimeconfig 文件说明

项目的bin\debug\netcoreapp${Version}下面能够找到这个${AppName}.runtimeconfig.json文件,简单来说,它就是用来定义应用程序所用的共享框架(.Net Core App)以及运行时选项 的一个文件。一个简单的例子{ "runtimeOptions&q…

net core 3.0 之Grpc新特性小试牛刀

作者: 相信微服务大家伙都有听说和知道,好处弊端咱也不多说了,Grpc算是一个比较全面的微服务框架,也得到微软的支持总结下来就是,跨平台,可靠,通信快,扩展性强,网络消耗小…

CF1168D Anagram Paths(由必要到充分/虚树)

CF1168D Anagram Paths 对于这道题首先有一个关键的性质,那就是对于一个树,它是可重排的,当且仅当在树上任意一个节点,所有字母在相关联的字符串中出现次数最大值之和小于当前点到叶子的距离。这个性质可以通过归纳证明&#xff0…