.Net Core3.0 WebApi 項目框架搭建 十二:創建項目模板上傳到Nuget


使用場景

自己經過多年開發的沉淀后,開發出一個屬於自己的一套Demo項目,亦或是借鑒別人的項目后,優化了一個,然后我們在別的地方使用的時候(可能是下一個公司),如果還想用自己的模板,也可能是供新入職的同事使用,經常會是以下幾個辦法

 

1、對比着之前的項目結構,在VistulStudio中手動創建一個空的解決方案,從零開始,一點一點搭建。// 麻煩之大,可想而知

2、通過dotnet cli 命令來創建空項目,然后手動。// 會簡化一丟丟,但仍需要一層一層的創建類庫;

3、把Demo工程代碼里拷貝到U盤,或者上傳到雲盤,然后下載下來,改吧改吧。// 尋找過程很麻煩,依賴代碼承載工具;

4、把Demo工程代碼 Pull 到 Github 上,在別的地方直接 Clone ,然后改吧改吧。 // 開源出源碼,私密性不強;

 

 大家可以看到,上邊的這幾個辦法,都會有這樣或那樣的問題,快的不方便,方便的太局限。而且上邊的這些都有一個通病,不知道大家是否發現:就是不能快速修改工程名稱!舉個栗子,我的這個 Github 上的項目,大家下載下來,怎么快速把 Webapi.Core 改成 xxx.xxx 呢?

准備Demo項目模板

准備一個整理好的Demo模板,下面是我的模板地址

https://github.com/huguodong/Webapi.Template

將 Demo 模板導入到dotnet模塊庫中

在你的電腦任何地方,新建一個模板文件夾temple,用於以后打包多個模板使用:

├── temple                               //  用來存放所有的模板
│   ├── WebapiCoreTemple                   //  WebapiCore模板全部內容
│   │    ├── content                     //  存放Code 項目代碼,可直接運行
│   │    │    ├── Webapi.Core          
│   │    │    ├──  .          
│   │    │    ├──  .          
│   │    │    ├──  .          
│   │    │    ├── Webapi.Core.Services      
│   │    │    └── Webapi.Core.sln     
│   │    │ 
│   │    ├── license                     //  存放版本許可信息,如果不添加,后邊會警告,文章后邊會提到
│   │    │    └── license.txt          
│   │    │ 
│   │    └── 其他待定                     //  這里文章后邊會打包的時候用到
│   │

接下來咱們定義配置文件:

  1. 向源代碼項目的根目錄添加 .template.config 文件夾(注意是文件夾),到時候與它同級的文件都會被打包。
  2. 在 .template.config 文件夾中,創建 template.json 文件來配置模板。
{
    "$schema": "http://json.schemastore.org/template",//template.json 文件的 JSON 架構,可以不要該鍵值對
    "author": "huguodong", //必填!模板創建者
    "classifications": [ "Web/WebAPI" ], //必填,這個對應模板的Tags,其他的比如 [ "Common", "Console" ],
    "name": "Core.Webapi.Template", //必填,這個是模板名,比如ASP.NET Core Web API
    "identity": "Core.Webapi.Template.HGD", //可選,模板的唯一名稱
    "shortName": "corewebapi", //必填,這個對應模板的短名稱,比如webapi
    "tags": {
      "language": "C#" ,
      "type":"project"
    },
    "sourceName": "Webapi.Core",  // 可選,要替換的名字,這個就是模板的項目名,以后新建的時候,會把這個名字替換成其他,比如HelloBlog(警告!這里不要寫一些專用詞匯,比如app呀,net呀,core之類的)
    "preferNameDirectory": true  // 可選,添加目錄  
}

經過上面兩步的處理,咱們已經把模板源代碼准備好了,並且也按照固定的規則,把配置文件配置好了.接下來就是把代碼導入到 dotnet 模板里。

代碼DOS命令窗口,輸入命令:

// 使用文件分發模板,
// 注意文件路徑:content文件夾的上一級,可以對比上邊的截圖中的文件夾結構
dotnet new -i F:\temple\WebapiTemple

卸載命令:

dotnet new -u F:\temple\WebapiTemple

使用dotnet新模板創建一個項目

隨便找一個文件夾,然后執行我們的操作:

F:\test>dotnet new corewebapi -n New.Core

 自動根據Demo幫我們創建好了項目,而且項目名也改了

打包項目成Nupkg包

在 content 文件夾旁邊,添加 nuspec 文件。 nuspec 文件是 XML 清單文件,用於描述包內容,並促進創建 NuGet 包。

下邊范本文件中的漢字只是我的解釋說明,如果你自己做,請千萬要去掉,不能帶中文字符!

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>Webapi.Core.Template.HGD</id>// nuget包標識,在 nuget.org 或包駐留的任意庫中必須是唯一的
    <version>1.0.0</version>// 遵循 major.minor.patch 模式的包版本。
    <description>
      Creates a core webapi app.// 用於 UI 顯示的包的詳細說明。
    </description>
    <authors>huguodong</authors>// 包創建者的逗號分隔列表,與 nuget.org 上的配置文件名稱一致
    <packageTypes>
      <packageType name="Template" />// 包類型
    </packageTypes>
    <license type="file">license\license.txt</license>// 上文提到的許可證信息
  </metadata>
</package>

下載Nuget.exe:https://www.nuget.org/downloads 把下載好的 nuget.exe 拷貝到 nuspec  范本文件同級的目錄中:

打開 DOS 命令窗口,進入到當前文件夾,然后直接運行打包命令:

// 執行打包操作,文件地址就是 nuspec 范本地址
nuget pack Webapi.Core.Template.HGD.nuspec

本地測試

然后執行命令:

// 將nupkg 包分發
dotnet new -i  F:\temple\WebapiTemple\Webapi.Core.Template.HGD.nuspec

如果能夠成功安裝表示打包成功

發布包到 Nuget

首先你需要在 nuget.org 官網注冊賬號,這里不細說,然后點擊到上傳頁面:https://www.nuget.org/packages/manage/upload,點擊“browse”

nuget.org 會告知包名稱是否可用。 如果無法使用,則更改項目中的包標識符、重新生成,並重試上傳。

 

 

 當所有信息准備就緒后,選擇“提交”按鈕

 

 

 

  上傳成功后,nuget 會后台進行掃描病毒,然后進行發布,中間大概等待10分鍾后,你會收到一個官方的郵件,提示你已經發布成功。

Nuget包導入到dotnet模板,並創建新工程

在上邊發布成功了以后,我們直接就可以通過 nuget 唯一包id,來進行導入dotnet 模板操作:

// 通過nuget.org ID 導入分發,這個名稱,就是我們之前在 nuspec 范本文件中,配置的nuget包 ID
dotnet new --install Webapi.Core.Template.HGD::1.0.0

 

 執行之前用到的創建模板的命令,成功生成了項目:

dotnet new corewebapi -n New.Core

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM