使用場景
自己經過多年開發的沉淀后,開發出一個屬於自己的一套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 │ │ │ │ │ └── 其他待定 // 這里文章后邊會打包的時候用到 │ │
接下來咱們定義配置文件:
- 向源代碼項目的根目錄添加 .template.config 文件夾(注意是文件夾),到時候與它同級的文件都會被打包。
- 在 .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