.Net框架的模块代码生成器--其一(dotnet new)
小白教程声明,首先先介绍一下.Net 框架及模块是什么情况:
1、公司的大佬会把框架的代码打包成Nuget包放在公司的服务器上
2、公司会专门开一个git仓库,存储模块的代码,每个模块都有其独立的文件夹
3、Visual Studio的Nuget包管理那里会添加自己公司的Nuget包源,保证每个模块使用的都是同一套框架代码
每次产生一个新模块时都要经历这么几个步骤:
1、创建一个新文件夹,里面创建很多项目(一般框架代码都会分层,什么接口层、业务层、数据层这些;每一层对应一个项目,应该大家都是大同小异的吧)
2、要添加每个项目之间的引用,改DbContext之类的各种“配置文件”
3、(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写
步骤太复杂并且不需要动脑;所以就要把这些工作交给指令--dotnet new
1、准备一个模块的文件夹作为模板(如图中的App.Meeting),放在一个别的什么文件夹里面都可以,并在同一目录下创建一个名为.template.config的文件夹

2、进入.template.config文件夹,创建一个template.json文件,文件内容如下,重要的配置项给出了注释,仿照着填吧
{
"$schema": "http://json.schemastore.org/template",
"author": "ogurayui",
"classifications": [ "Template" ],
"name": "Meeting Template",
"identity": "Meeting Template", //模板唯一标识
"groupIdentity": "Meeting Template",
"shortName": "MeetingTemplate", //【修改】短名称,使用 dotnet new <shortName> 安装模板时的名称
"tags": {
"language": "C#",
"type": "project"
},
"sourceName": "Meeting", //【修改】在使用 -n 选项时,会替换模板中项目的名字
"preferNameDirectory": true
}
3、回到上一级目录,执行指令,创建模板
dotnet new -i MeetingTemplate

4、使用指令创建新模块代码
-n 是要替换的字符串,替换文件夹内的所有Meeting(无论这个字符串出现在文件名还是文件内容)
-o 表示输出的路径,.表示当前文件夹
dotnet new MeetingTemplate -n %moduleName% -o .
P.S.懒得记指令的还可以写个.bat文件代替,这样每次创建新模块就可以点击这个bat,bat文件内容如下
@echo off
set/p moduleName=请输入对新模块的命名(如Meeting):
echo dotnet new MeetingTemplate -n %moduleName% -o .
dotnet new MeetingTemplate -n %moduleName% -o .
pause
我们解决了1、2步骤,是不是节省了很多工作量呢
★再拓展一点,把整个文件夹打包成Nuget包
1、把刚刚两个文件夹.template.config和App.Meeting放在一个MeetingTemplate文件夹中,MeetingTemplate的文件夹又放在Templates的文件夹中,Templates又放到Template中
也就是那两个文件夹现在在这里
2、去到Template文件夹下,创建Templates.csproj文件,用Notepad++编辑内容如下,标注了“不要改”的最好别改

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup>
<PackageType>Template</PackageType> //不要改
<PackageVersion>1.0</PackageVersion>
<PackageId>Templates</PackageId>
<Title>My Templates</Title>
<Authors>ogurayui</Authors>
<Description>Templates to use when creating an module</Description>
<PackageTags>dotnet-new;templates;contoso</PackageTags>
<TargetFrameworks>netcoreapp2.1;netstandard2.0</TargetFrameworks> //不要改 <IncludeContentInPack>true</IncludeContentInPack> //不要改
<IncludeBuildOutput>false</IncludeBuildOutput> //不要改
<ContentTargetFolders>content</ContentTargetFolders> //不要改
</PropertyGroup> <ItemGroup>
<Content Include="Templates\**\*" Exclude="Templates\**\bin\**;Templates\**\obj\**" />
<Compile Remove="**\*" /> //**和*都不需要改,之前踩了这坑,特地说一下
</ItemGroup> </Project>
3、在Template文件夹下使用指令dotnet pack打包

3、使用指令dotnet new -i <绝对路径> 安装打包好后的模板的.neget,这个指令会把所有Nuget包下所有的模板,如上面说的MeetingTemplate模板

4、创建模板,和上面的4一样的用法
dotnet new MeetingTemplate -n %moduleName% -o .
下一篇:.Net框架的模块代码生成器--其二(dotnet tool)
.Net框架的模块代码生成器--其一(dotnet new)的更多相关文章
- .Net框架的模块代码生成器--其二(dotnet tool)
以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...
- .Net框架的模块代码生成器--其三(dotnet tool指令的参数)
别人已经写好了一个这种处理指令参数的库,我们这里是使用别人的库来实现规范的指令系统 继续上一篇的gfile或者新建一个.Net Core控制台程序也可以 1.安装nuget包,程序包管理器控制台运行 ...
- (三):C++分布式实时应用框架——系统管理模块
C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...
- .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档
前言 各位好,又是一个多月没更新文章了. 原因嘛,大家都懂的,太忙了~ 临近年末,公司的项目.年会的做技术支持,同事朋友聚餐也比较频繁. 当然视频教程也没有继续更新.我的锅~ 但是这个月好歹抽空做了一 ...
- jQuery系列 第八章 jQuery框架Ajax模块
第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...
- Qt框架及模块认识
小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...
- SSH框架分模块开发
------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...
- 第二章、drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 (详细版)
目录 drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 Postman接口工具 drf框架 注册rest_framework drf框架风格 drf请求生命周期 请求模块 ...
- Silky微服务框架之模块
模块的定义 Silky是一个包括多个nuget包构成的模块化的框架,每个模块将程序划分为一个个小的结构,在这个结构中有着自己的逻辑代码和自己的作用域,不会影响到其他的结构. 模块类 一般地,一个模块的 ...
随机推荐
- Oracle 数据库 回滚
1.打开Flash存储的权限ALTER TABLE authorization ENABLE row movement ;2.把表还原到指定时间点flashback table authorizati ...
- YYC松鼠短视频系统上传视频会被压缩的问题如何解决?
uni.chooseVideo({ count: 1, compressed: false, sourceType: ['album', 'camera'], success: (res) => ...
- DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排
前言 在上节的内容中,我们已经通过一个简单的实例,将Docker-compose 进行了实际的应用.这一小节中.我们将通过学习和了解,着重认识容器的编排,上一节只算是一个小小的测试.在这一节中.我们将 ...
- Dubbox 环境搭建
第一章:Dubbox简介 Dubbox是一个开源的RPC(Remote ProcedureCall Protocol)远程调用框架,是由dangdang对阿里的Dubbo的升级,可以被视为Dubbo的 ...
- C++读取MNIST数据集
MNIST是一个标准的手写字符测试集. Mnist数据集对应四个文件: train-images-idx3-ubyte: training set images train-labels-idx1- ...
- ATL窗口
标准的Windows应用程序框架: /*------------------------------------------------------------ HELLOWIN.C -- Displ ...
- android studio sqlite实际应用中存在的问题
原项目已上传到github long f = dbdatabase.update("user", values, "id=?", new String[]{St ...
- JAVA全栈工程师学习线路(建议收藏)
互联网技术,更新迭代迅速,用日新月异来说也不为过,所以,面对这这种大环境,对于码农尤其是那些对于初入职场的新手来说,该如何自我学习升级,往方向发展,这一点是大家都经常困惑的. 大部分人,刚开始学习的J ...
- num04---模板方法模式
最近看书又遇到模板方法模式,具体是在同步器(AQS)的内容上.就顺便再来回顾下. 同步器AbstractQueuedSynchronizer(AQS)是一个抽象类.其中定义了 基本 ...
- 面试官:你连RESTful都不知道我怎么敢要你? 文章解析
面试官:你连RESTful都不知道我怎么敢要你?文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接口4.一致的数据格式4.系统分层5.可缓 ...