小白教程声明,首先先介绍一下.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)的更多相关文章

  1. .Net框架的模块代码生成器--其二(dotnet tool)

    以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...

  2. .Net框架的模块代码生成器--其三(dotnet tool指令的参数)

    别人已经写好了一个这种处理指令参数的库,我们这里是使用别人的库来实现规范的指令系统 继续上一篇的gfile或者新建一个.Net Core控制台程序也可以 1.安装nuget包,程序包管理器控制台运行 ...

  3. (三):C++分布式实时应用框架——系统管理模块

    C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...

  4. .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档

    前言 各位好,又是一个多月没更新文章了. 原因嘛,大家都懂的,太忙了~ 临近年末,公司的项目.年会的做技术支持,同事朋友聚餐也比较频繁. 当然视频教程也没有继续更新.我的锅~ 但是这个月好歹抽空做了一 ...

  5. jQuery系列 第八章 jQuery框架Ajax模块

    第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...

  6. Qt框架及模块认识

    小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...

  7. SSH框架分模块开发

    ------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...

  8. 第二章、drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 (详细版)

    目录 drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 Postman接口工具 drf框架 注册rest_framework drf框架风格 drf请求生命周期 请求模块 ...

  9. Silky微服务框架之模块

    模块的定义 Silky是一个包括多个nuget包构成的模块化的框架,每个模块将程序划分为一个个小的结构,在这个结构中有着自己的逻辑代码和自己的作用域,不会影响到其他的结构. 模块类 一般地,一个模块的 ...

随机推荐

  1. centos7安装OTRS6

    1.在文件/etc/selinux/config中配置SELINUX=disabled 重启系统.重启后确认命令getenforce返回为Disabled 2.配置数据库 我们这里使用MariaDB ...

  2. 第三次作业:使用Packet Tracer分析TCP连接的建立与释放过程

    0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内容 使用Packe ...

  3. 《 Java 编程思想》CH06 访问权限控制

    访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 重构即重写代码,以使得它更可读,更容易理解,并因此而更具维护性. 在面向对象设计中需要考虑一个基本问题:"如何把 ...

  4. android studio闪退的原因

    可能是因为某个监听的问题,比如没有把Mainacticity中定义的button和布局文件中的按钮控件关联起来,就会出现这个问题

  5. sqlserver datatime value plus random number

    If we want to make some identiity value in sqlserver , we can use identity data type in a table.Howe ...

  6. Linux系统之网络文件共享与数据实时同步实践

    1.实现基于MYSQL验证的vsftpd虚拟用户访问 首先环境说明,数据库服务器是192.168.0.10,vsftpd服务器是192.168.0.30 1)安装vsftpd [root@test-c ...

  7. 基于MySQL+MHA+Haproxy部署高可用负载均衡集群

    一.MHA 概述 MHA(Master High Availability)是可以在MySQL上使用的一套高可用方案.所编写的语言为Perl 从名字上我们可以看到.MHA的目的就是为了维护Master ...

  8. python学习(6)选择排序算法简单代码

    选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.[1] 简单选择排序的基 ...

  9. javascript js获取html元素各种距离方法

    //滚动条 scrollLeft//滚动条距左边距离 scrollTop//滚动条距顶部距离 scrollWidth//滚动条元素的宽 scrollHeight//滚动条元素的高 //可视范围 cli ...

  10. golang搭建一个简单的web服务器

    package main import ( "io/ioutil" "log" "net/http" ) func main() { htt ...