亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.NET Core自定義項目模板的全過程

 更新時間:2021年04月26日 10:40:06   作者:chaney1992  
這篇文章主要給大家介紹了關于.NET Core自定義項目模板的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言:

前面介紹 自定義項目模板 中介紹了一種簡單的方式——通過創(chuàng)建項目導出為項目模板方式實現(xiàn)。本次將采用dotenet cil(手腳架)來創(chuàng)建項目模板。

那么,我們首先看下當前dotnet 支持的項目模板:

可以看到當前dotnet中已經(jīng)提供了很多模板項目,那么如何根據(jù)項目開發(fā)的積累內(nèi)容通過dotnet cli創(chuàng)建一個自己的項目來提升開發(fā)效率呢?

1、實現(xiàn)自定義項目模板

自定義模板項目模板肯定就需要模板實現(xiàn),本次就使用使用之前文章中項目結(jié)構作為模板項目來實現(xiàn)自定義項目模板

 

接下跟著步驟來創(chuàng)建模板項目

創(chuàng)建模板配置文件

在項目根文件夾中創(chuàng)建文件夾:.template.config 并在目錄下創(chuàng)建 template.json。如下圖:

定義項目模板相關信息

   修改template.json內(nèi)容為以下內(nèi)容:

{
    "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命令創(chuàng)建模板項目時,使用短名稱將利于使用。
  • sourceName:模板替換的關鍵文本,使用時需要注意,要選擇合適的替換文本,不然容易誤傷代碼。

項目模板安裝

   接下來進入項目目錄,將這個模板安裝到cli中。使用dotnet new -i 進行模板的安裝。

dotnew new -i TempDemo

卸載項目模板:

dotnet new -u 模板目錄

使用命令創(chuàng)建項目:

dotnet new apiTmp -n Test -o .

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

-n:指定的是將項目中出現(xiàn)的所有文本MyJob替換為Test,因為配置中sourceName是ApiTemplate,可按需配置。

-o:指定的是生成項目輸出目錄,上述命令生成項目輸出到當前目錄。

結(jié)果如下圖:    

  

此通過dotnet cli創(chuàng)建項目模板已完成,但僅僅這樣完全不能滿足日常工作需求。

  如:A項目需要日志記錄,但B項目不需要日志記錄;A項目需要制定PG數(shù)據(jù)庫作為存儲方式,B項目需要制定MySQL作為存儲方式。

  那么這些問題能否在項目創(chuàng)建時根據(jù)設置而滿足項目需求呢?

2、模板項目進階用法

文件過濾:根據(jù)參數(shù)過濾制定文件和代碼內(nèi)容

  a) 定義參數(shù):在template.json中添加以下內(nèi)容:EnableAuditLog-參數(shù)名稱

{
  //……
  "symbols": {
    //是否使用審計日志功能
    "EnableAuditLog": {
      "type": "parameter", //它是參數(shù)
      "dataType": "bool", //bool類型的參數(shù)
      "defaultValue": "false" //默認是不啟用
    }
  },
  "sources": [
    {
      "modifiers": [
        {
          "condition": "(!EnableAuditLog)", //條件,由EnableAuditLog參數(shù)決定
          "exclude": [ //排除下面的文件
            "AuditLogDemo/Fliters/AuditLogActionFilter.cs"
          ]
        }
      ]
    }
  ]
}

  b) 取消審計日志生效位置:

 c) 重新生成模板,查看當前模板支持的參數(shù):

  d) 創(chuàng)建項目檢查設置是否生效:

選擇執(zhí)行:根據(jù)變量值選擇程序集引用

  a) 添加參數(shù):DbType指定選項數(shù)據(jù)庫類型

"symbols": {
    //數(shù)據(jù)源類型"DbType": {
      "type": "parameter", //它是參數(shù)
      "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) 修改項目文件:根據(jù)條件選擇對應程序集

<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) 使用數(shù)據(jù)庫處,同步處理

#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) 更新模板后,查看已生成了對應參數(shù)

   e) 創(chuàng)建項目查看生效情況: 

//不使用數(shù)據(jù)庫
dotnet new apiTmp -n AA -D None

//使用PG數(shù)據(jù)庫
dotnet new apiTmp -n BB -D PgSQL

   可以看到項目引用和程序代碼都根據(jù)傳入?yún)?shù)生成了?!   ?/p>

3、項目模板打包發(fā)布

 好東西當然不能只給自己使用,而應該怎么將生成的模板給大家使用呢?——Nuget 包發(fā)布

 a)在模板根目錄創(chuàng)建一個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) 發(fā)布到nuget服務,給小伙伴們下載使用

總結(jié):

 通過dotnet cli 創(chuàng)建的模板項目,能更方便的根據(jù)項目需求生成對應的項目結(jié)構,提升開發(fā)效率。

 可以動手把積累的好項目打包成一個模板項目給小伙伴們使用

參考:

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自定義項目模板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論