返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.NET Core自定义项目模板的全过程
  • 762
分享到

.NET Core自定义项目模板的全过程

2024-04-02 19:04:59 762人浏览 安东尼
摘要

前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式——通过创建项目导出为项目模板方式实现。本次将采用dotenet cil(手脚架)来创建项目模板。 那么,我们首先看下当前do

前言:

前面介绍 自定义项目模板 中介绍了一种简单的方式——通过创建项目导出为项目模板方式实现。本次将采用dotenet cil(手脚架)来创建项目模板。

那么,我们首先看下当前dotnet 支持的项目模板:

可以看到当前dotnet中已经提供了很多模板项目,那么如何根据项目开发的积累内容通过dotnet cli创建一个自己的项目来提升开发效率呢?

1、实现自定义项目模板

自定义模板项目模板肯定就需要模板实现,本次就使用使用之前文章中项目结构作为模板项目来实现自定义项目模板

 

接下跟着步骤来创建模板项目

创建模板配置文件

在项目根文件夹中创建文件夹:.template.config 并在目录下创建 template.JSON。如下图:

定义项目模板相关信息

   修改template.json内容为以下内容:


{
    "author": "cwsheng", //必须
    "classifications": [ "WEB/webapi" ], //必须,这个对应模板的Tags
    "name": "apiTmp", //必须,这个对应模板的Templates
    "identity": "ApiTemplate", //可选,模板的唯一名称
    "shortName": "apitmp", //必须,这个对应模板的Short Name
    "tags": {
      "language": "C#" ,
      "type":"project"
    },
    "sourceName": "ApiTemplate",  // 可选,要替换的名字
    "preferNameDirectory": true  // 可选,添加目录  
}

注意:shortName和sourceName

  • author:模板作者
  • classifications:模板特征标识。上文举例的配置是因为我自定义的模板包括了console和webapi。
  • identity:此模板的唯一名称
  • name:用户看到的模板名称
  • shortName:短名称。当使用CLI命令创建模板项目时,使用短名称将利于使用。
  • sourceName:模板替换的关键文本,使用时需要注意,要选择合适的替换文本,不然容易误伤代码。

项目模板安装

   接下来进入项目目录,将这个模板安装到cli中。使用dotnet new -i 进行模板的安装。


dotnew new -i TempDemo

卸载项目模板:


dotnet new -u 模板目录

使用命令创建项目:


dotnet new apiTmp -n Test -o .

apiTmp:是模板配置文件中指定的shortName。

-n:指定的是将项目中出现的所有文本MyJob替换为Test,因为配置中sourceName是ApiTemplate,可按需配置。

-o:指定的是生成项目输出目录,上述命令生成项目输出到当前目录。

结果如下图:    

  

此通过dotnet cli创建项目模板已完成,但仅仅这样完全不能满足日常工作需求。

  如:A项目需要日志记录,但B项目不需要日志记录;A项目需要制定PG数据库作为存储方式,B项目需要制定Mysql作为存储方式。

  那么这些问题能否在项目创建时根据设置而满足项目需求呢?

2、模板项目进阶用法

文件过滤:根据参数过滤制定文件和代码内容

  a) 定义参数:在template.json中添加以下内容:EnableAuditLog-参数名称


{
  //……
  "symbols": {
    //是否使用审计日志功能
    "EnableAuditLog": {
      "type": "parameter", //它是参数
      "dataType": "bool", //bool类型的参数
      "defaultValue": "false" //默认是不启用
    }
  },
  "sources": [
    {
      "modifiers": [
        {
          "condition": "(!EnableAuditLog)", //条件,由EnableAuditLog参数决定
          "exclude": [ //排除下面的文件
            "AuditLogDemo/Fliters/AuditLogActionFilter.cs"
          ]
        }
      ]
    }
  ]
}

  b) 取消审计日志生效位置:

 c) 重新生成模板,查看当前模板支持的参数:

  d) 创建项目检查设置是否生效:

选择执行:根据变量值选择程序集引用

  a) 添加参数:DbType指定选项数据库类型


"symbols": {
    //数据源类型"DbType": {
      "type": "parameter", //它是参数
      "datatype": "choice", //选项类型
      "choices": [ //选项取值
        {
          "choice": "Mssql",
          "description": "MS SQL Server"
        },
        {
          "choice": "mysql",
          "description": "MySQL"
        },
        {
          "choice": "PgSQL",
          "description": "postgresql"
        },
        {
          "choice": "SQLite",
          "description": "SQLite"
        },
        {
          "choice": "None",
          "description": "None"
        }
      ],
      "defaultValue": "None",
      "description": "The type of SQL to use"
    },
    "MsSQL": {
      "type": "computed",
      "value": "(DbType == \"MsSQL\")"
    },
    "MySQL": {
      "type": "computed",
      "value": "(DbType == \"MySQL\")"
    },
    "PgSQL": {
      "type": "computed",
      "value": "(DbType == \"PgSQL\")"
    },
    "SQLite": {
      "type": "computed",
      "value": "(DbType == \"SQLite\")"
    },
    "None": {
      "type": "computed",
      "value": "(DbType == \"None\")"
    }
  }

   b) 修改项目文件:根据条件选择对应程序集


<Project Sdk="Microsoft.net.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup Condition="'$(None)'!='True'">
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.8" />
  </ItemGroup>
  <ItemGroup  Condition="'$(SQLite)' == 'True'">
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.8" />
  </ItemGroup>
  <ItemGroup  Condition="'$(MsSQL)' == 'True'">
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.8" />
  </ItemGroup>
  <ItemGroup  Condition="'$(PgSQL)' == 'True'">
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />
  </ItemGroup>
</Project>

   c) 使用数据库处,同步处理


#if (!None)
            //审计日志存储
            services.ADDDbContext<AuditLogDBContent>(options =>
            {
                string conn = Configuration.GetConnectionString("LogDB");
#if Sqlite
                options.UseSqlite(conn, options =>
                {
                    options.MigrationsAssembly("AuditLogDemo");
                });
#endif
#if PgSQL
                options.UseNpgsql(conn);
#endif

#if MsSQL
                options.UseSqlServer(conn);
#endif

            });
#endif

   d) 更新模板后,查看已生成了对应参数

   e) 创建项目查看生效情况: 


//不使用数据库
dotnet new apiTmp -n AA -D None

//使用PG数据库
dotnet new apiTmp -n BB -D PgSQL

   可以看到项目引用和程序代码都根据传入参数生成了。    

3、项目模板打包发布

 好东西当然不能只给自己使用,而应该怎么将生成的模板给大家使用呢?——Nuget 包发布

 a)在模板根目录创建一个nuspec文件:apiTmp.nuspec


<?xml version="1.0" encoding="utf-8"?>
<package xmlns="Http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>apiTmp</id>
    <version>1.0.0</version>
    <description> WebApi Template </description>
    <authors>cwshegn</authors>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
  </metadata>
</package>

 b)使用Nuget Pack 命令打包  


 nuget pack apiTmp.nuspec -OutputDirectory .

 c) 发布到nuget服务,给小伙伴们下载使用

总结

 通过dotnet cli 创建的模板项目,能更方便的根据项目需求生成对应的项目结构,提升开发效率。

 可以动手把积累的好项目打包成一个模板项目给小伙伴们使用

参考:

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

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

到此这篇关于.net core自定义项目模板的文章就介绍到这了,更多相关.Net Core自定义项目模板内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: .NET Core自定义项目模板的全过程

本文链接: https://lsjlt.com/news/124597.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .NET Core自定义项目模板的全过程
    前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式——通过创建项目导出为项目模板方式实现。本次将采用dotenet cil(手脚架)来创建项目模板。 那么,我们首先看下当前do...
    99+
    2024-04-02
  • VS2019 自定义项目模板的实现方法
    前言: 使用“宇宙最强IDE”开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出、审计日...
    99+
    2024-04-02
  • 怎么在VS2019中自定义一个项目模板
    怎么在VS2019中自定义一个项目模板?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、自定义项目模板创建 本次我们来创建一个实现了基础功能的webapi模板 创建自定义的项目...
    99+
    2023-06-14
  • Visual Studio自定义项目模版
    以 Visual Studio 2017 为例。在 Visual Studio 中用户项目模版就是我们俗称的自定义项目模版。 用户项目模版位置 在Visual Studio中打开[工...
    99+
    2024-04-02
  • logback 自定义Pattern模板教程
    配色板 "%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray","%...
    99+
    2024-04-02
  • Informer时序模型(自定义项目)
    开源项目 说明 读完代码解析篇,我们针对开源项目中的模型预测方法做一下介绍。作者在Github上给出了模型预测方法以及Q、K图的做法,这里提供下载链接首先,在不更改任何参数的情况下跑完代码,会在项目文...
    99+
    2023-08-31
    python 深度学习 机器学习
  • Django自定义模板标签和过滤器
    1.创建模板库 在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py。 在这个模块中编写相关代码。 注意:templatetags所在APP应该在配置文件中...
    99+
    2023-01-31
    自定义 过滤器 模板
  • 如何下载定义Visual Studio 2008 项目模板
    这篇文章主要介绍了如何下载定义Visual Studio 2008 项目模板,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在安装MVC,ASP.NET AJAX 后都会在新建...
    99+
    2023-06-17
  • Visual Studio怎么自定义项目模版
    这篇“Visual Studio怎么自定义项目模版”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Visual&nb...
    99+
    2023-07-02
  • django-5-自定义模板过滤器及标签
    <<<代码布局(自定义的代码放哪里)>>> (1)某个app特有的   1.一般放app目录下 固定名为templatetags 的python文件夹里鸭,如果是别的名称,django是找不到的哦! ...
    99+
    2023-01-30
    自定义 器及 模板
  • 创建ASP.NET Core Web应用程序并介绍项目模板
    目录创建ASP.NET Web 应用程序运行ASP.NET Core Web 应用程序:ASP.NET Core应用程序模板空APIWeb应用程序模板Web应用程序(模型视图-控制器...
    99+
    2024-04-02
  • IDEA创建自定义模板图文教程
    IDEA创建自定义模板 1.项目目录任意一处 右键 > 新建 > 编辑文件模板 2.点击加号创建模板 3.设置名称(如:XML File,Servlet File),...
    99+
    2024-04-02
  • VS 2010和.NET 4起始项目模板是怎样的
    本篇文章为大家展示了VS 2010和.NET 4起始项目模板是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Visual Studio 2010和.NET 4起始项目模板中,创建新项目是开发...
    99+
    2023-06-17
  • C#自定义WPF中Slider的Autotooltip模板
    Slider控件有一个我比较喜欢的属性"AutoToolTip",可以在拖动的过程中显示当前刻度,然而这个刻度却不支持模板定制,并且就连自定义格式也不行。这就大大...
    99+
    2024-04-02
  • 使用vant 自定义弹框全过程
    目录vant 自定义弹框vant 弹框和弹出层vant 自定义弹框 使用vant制作弹框,具体如下: html层 <van-popup v-model="show...
    99+
    2024-04-02
  • 通过自定制LogManager实现程序完全自定义的logger
    目录引言怎么实现自定义的LogManager自定义的LogManager中使用到的ServerFileHandler实现Formatter前一篇博文介绍了JDK logging基础知...
    99+
    2024-04-02
  • springboot整合shiro与自定义过滤器的全过程
    目录filter自定义过滤器  增加了 对验证码的校验Shiro中的权限控制总结filter自定义过滤器  增加了 对验证码的校验 package com.you...
    99+
    2024-04-02
  • android编程实现的自定义注释模板实例
    本文实例讲述了android编程实现的自定义注释模板。分享给大家供大家参考,具体如下: 作为一名程序员 不仅要有一个写代码的能力,养成一个良好的编写习惯也是很重要的。今天给大家...
    99+
    2022-06-06
    自定义 模板 Android
  • Flutter构建自定义Widgets的全过程记录
    目录一.组合widget实现二.通过自定义CustomPainter实现widgets三.饼状图piechart.dart代码展示四.实际效果图,eg:附:Flutter中父widg...
    99+
    2024-04-02
  • node.js利用express自动搭建项目的全过程
    一、安装express库和生成器 打开cmd输入命令:  yarn global add express express-generator 解释: 上面里两个模块分别表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作