為.NET Core專案定義Item Template
作為這個星球上最強大的IDE,Visual Studio不僅僅提供了很多原生的特性,更重要的是它是一個可定製的IDE,比如自定義Project Template和Item Template就是一個非常有用的擴充套件點。這裡我們主要關注Item Template,它時我們可以在“Add new Item”對話方塊中新增我們自定義的Item(如下圖所示)。如果不瞭解Item Template,Scott Gu的文章。
我們之前自定義了一些Item Template,最近想在.NET Core專案中使用它們,但是失敗了。今天為了這個折騰得夠嗆,不過好在最後還是解決了——雖然解決方案僅僅是新增一行程式碼。
如果不瞭解Item Template定義檔案的Schema,定義Item Template最簡單的方式就是直接利用VS建立一個對應的專案。由於我們是針對.NET Core專案提供的Item Template,所以我們建立了一個.NET Core類庫專案。作為演示,我們在專案中添加了如下一個Foobar.cs檔案作為這個Item Template為目標專案新增的Item。
按照慣例,我們只需要選擇選單File->Export Template開啟如下Template的匯出嚮導。我們選擇Item Template選項後進入下一步。
由於我們只要利用Item Template為目標新增Foobar.cs這個檔案,所以我們只需選擇這個檔案即可。
選擇預設選項知道完成嚮導,作為一個.zip檔案將會出現在目錄“%userprofile%Documents\Visual Studio 2015\My Exported Templates”目錄下。
按照慣例,我們只需要將這個zip檔案拷貝到%userprofile%Documents\Visual Studio 2015\Templates\ItemTemplates\.NET Core“目錄下就可以了。但是為.NET Core專案新增Item的時候並沒有看到它。
為此我們解壓縮這個檔案,檢視它的”MyTemplate.vstemplate“檔案,如下所示的就是該檔案的內容。主要關注代表專案型別的<ProjectType>元素,我們看到它的值為 DNX。有人可能認為DNX是錯誤的專案型別,雖然DNX已經是個歷史名次,但是VS目前依然使用它來表示.NET Core。
1: <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
2: <TemplateData>
3: <DefaultName>MyItem.cs</DefaultName>
4: <Name>MyItem</Name>
5: <Description><No description available></Description>
6: <ProjectType>DNX</ProjectType>
7: <SortOrder>10</SortOrder>
8: <Icon>__TemplateIcon.ico</Icon>
9: </TemplateData>
10: <TemplateContent>
11: <References />
12: <ProjectItem SubType="" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">Foobar.cs</ProjectItem>
13: </TemplateContent>
14: </VSTemplate>
實際上除了需要制定<ProjectType>之外,我們還需要指定TemplateGroupID,並且將值設定為“SharedDotNetAndDotNetWeb”(表示普通的.NET Core類庫專案和Web專案都適用)
1: <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
2: <TemplateData>
3: <DefaultName>MyItem.cs</DefaultName>
4: <Name>MyItem</Name>
5: <Description><No description available></Description>
6: <ProjectType>DNX</ProjectType>
7: <TemplateGroupID>SharedDotNetAndDotNetWeb</TemplateGroupID>
8: <SortOrder>10</SortOrder>
9: <Icon>__TemplateIcon.ico</Icon>
10: </TemplateData>
11: <TemplateContent>
12: <References />
13: <ProjectItem SubType="" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">Foobar.cs</ProjectItem>
14: </TemplateContent>
15: </VSTemplate>然後我們重新壓縮打包並部署,