.NET Core 內建的範本功能簡單好上手,由於架構簡化許多 (相較於 Visual Studio 範本),所以也非常好上手。在仔細研究之後,發現還是蠻多小細節的,只要事先建立一些重要的基本觀念,要寫出好用、實用的專案範本一點都不麻煩。

範本基本概念
-
列出目前所有範本
透過 -l 參數可以列出目前所有已安裝的專案範本清單:
dotnet new -l
透過 -u 參數則會列出目前所有範本的詳細資訊:
dotnet new -u
雖然加上 -u 參數是用來移除現有範本之用,但是 -u 不加上參數時,卻可以列出目前所有範本的詳細資訊,你可以看見每個範本的 NuGetPackageId 與 Version 版本號,還能得知移除範本所需的命令!
-
範本的種類
在 Visual Studio 裡面,範本有兩種:
- 專案範本 (Project Templates)
- 項目範本 (Item Templates)
在使用 .NET Core CLI 的時候,你可以搭配 --type 參數來篩選範本,例如:
dotnet new -l --type=project
dotnet new -l --type=item
dotnet new -l --type=other
預設 --type 參數只有三種可能的值:project、item 與 other。
範本的組成項目
範本的組成包含兩種成分:
-
來源檔案和資料夾
也就是所有要被自動產生的檔案與資料夾,基本上不限定任何檔案型態或格式,任何檔案都可以當成範本的一部分。
-
設定檔 (template.json)
你必須建立一個 .template.config/template.json 設定檔,用來告訴 .NET Core CLI 該怎樣產生新檔案。其內容範例如下:
{
"$schema": "http://json.schemastore.org/template",
"identity": "Duotify.WebAPI.3.1",
"author": "Will Huang",
"classifications": [ "Common", "Code" ],
"name": "Example templates: string extensions",
"shortName": "duotify-webapi",
"tags": {
"language": "C#",
"type": "project"
},
"sourceName": "MyProject.Con",
"preferNameDirectory": true
}
上述這些 Properties (屬性) 除了 tags 以外,都是必要的屬性,分別說明如下:
-
$schema: 此為 template.json 檔案的 JSON 結構描述 URI,只要設定上去,編輯器就會開始提供 IntelliSense 自動完成能力。

-
identity: 此範本的唯一名稱,不能跟任何其他範本重複。
-
name: 使用者在執行 dotnet new -l 時會看到的範本名稱。
-
shortName: 執行 dotnet new shortName 命令時所使用的範本短名。
-
author: 宣告範本的作者名稱。
-
classifications: 範本分類 (字串陣列)。當你執行 dotnet new -l 列出範本清單時,會自動出現在「標記」(Tags) 欄位中。
-
tags: 用來宣告範本的標記資訊,從名稱來看,很容易跟 classifications 混淆,因為都是「標記」的意思。這個屬性主要用來跟 dotnet new 的 --type 與 -lang 兩個參數搭配使用。tags 屬性下包含兩個子屬性:
language: 程式語言。可能的值有:C#、VB、F#,除此之外你也可以設定為任何語言。
type: 範本類型。這裡只有兩種可能的值:project (專案範本)、item (項目範本)。你也可以指定任意字串。
-
sourceName: 指定來源名稱。
- 我們在執行
dotnet new 的時候,可以指定 -n 參數,這個參數定義了專案名稱。
- 這裡所定義的
sourceName 其實是一個可以被取代的變數,如果你設定為 MyProject.Con 的話,當你在執行 dotnet new 的時候,程式會自動找出來源檔案和資料夾中所有檔案/目錄名稱與檔案內容,並將 MyProject.Con 字串替換成 -n 參數指定的名稱字串。
-
preferNameDirectory: 在執行 dotnet new 的時候,如果你有指定 -n 參數,預設會建立一個與 -n 參數值同名的資料夾,如果你將該屬性設定為 false 的話,就不會建立額外的資料夾。此屬性預設為 true。
群組識別與標記
如果你定義了 groupIdentity 屬性,會將多個範本合併成一個顯示項目,執行 dotnet new 的時候,就必須搭配 --type 或 -lang 參數來選擇要執行的範本。這個時候範本中的 tags 屬性就一定要設定了,該屬性下的 language 與 type 就是用來給這兩個參數篩選用的。
dotnet new mysample --type=item -lang=C#
dotnet new mysample --type=project -lang=C#
練習建立專案範本
請參考以下文件建立 項目範本、專案範本 與 範本套件!
- 教學課程:建立項目範本
- 教學課程:建立專案範本
- 教學課程:建立範本套件
如果想參考其他人所寫的範本,可以參考以下網址:
相關連結