zoukankan      html  css  js  c++  java
  • .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)

  • 相关阅读:
    2017/12/30Java基础学习——增强型for嵌套遍历在二维数组中的应用
    2017/12/30Java基础学习——复制数组のSystem.arraycopy()方法讲解
    2017/12/30Java基础学习——排序算法の选择法与冒泡法的比较
    2017/12/31Java基础学习——二维数组排序の数组工具类Arrays的方法综合运用
    2017/12/31Java基础学习——使用同一个值,填充整个数组のArrays.fill(a, number)方法
    2017/12/31Java基础学习——判断两个数组是否相同のArrays.equals(a, b)方法
    2017/12/31Java基础学习——查找数组元素位置のArrays.binarySearch()方法介绍
    HDU2030 汉字统计【输入输出流】
    HDU4509 湫湫系列故事——减肥记II【格式输入+存储设置+暴力+水题】
    HDU2567 寻梦【输入输出流】
  • 原文地址:https://www.cnblogs.com/ogurayui/p/12102701.html
Copyright © 2011-2022 走看看