1. 程式人生 > >為.NET Core專案定義Item Template

為.NET Core專案定義Item Template

作為這個星球上最強大的IDE,Visual Studio不僅僅提供了很多原生的特性,更重要的是它是一個可定製的IDE,比如自定義Project Template和Item Template就是一個非常有用的擴充套件點。這裡我們主要關注Item Template,它時我們可以在“Add new Item”對話方塊中新增我們自定義的Item(如下圖所示)。如果不瞭解Item Template,Scott Gu的文章

image

我們之前自定義了一些Item Template,最近想在.NET Core專案中使用它們,但是失敗了。今天為了這個折騰得夠嗆,不過好在最後還是解決了——雖然解決方案僅僅是新增一行程式碼。

如果不瞭解Item Template定義檔案的Schema,定義Item Template最簡單的方式就是直接利用VS建立一個對應的專案。由於我們是針對.NET Core專案提供的Item Template,所以我們建立了一個.NET Core類庫專案。作為演示,我們在專案中添加了如下一個Foobar.cs檔案作為這個Item Template為目標專案新增的Item。

image

按照慣例,我們只需要選擇選單File->Export Template開啟如下Template的匯出嚮導。我們選擇Item Template選項後進入下一步。

image

由於我們只要利用Item Template為目標新增Foobar.cs這個檔案,所以我們只需選擇這個檔案即可。

image

選擇預設選項知道完成嚮導,作為一個.zip檔案將會出現在目錄“%userprofile%Documents\Visual Studio 2015\My Exported Templates”目錄下。

image

按照慣例,我們只需要將這個zip檔案拷貝到%userprofile%Documents\Visual Studio 2015\Templates\ItemTemplates\.NET Core“目錄下就可以了。但是為.NET Core專案新增Item的時候並沒有看到它。

image

為此我們解壓縮這個檔案,檢視它的”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>&lt;No description available&gt;</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>&lt;No description available&gt;</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>
然後我們重新壓縮打包並部署,

image