作為這個星球上最強大的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>
文章列表
留言列表