Есть пара приемов, которые нужно использовать, если вы хотите иметь более пары шаблонов, а также чтобы они выглядели «красиво» в Visual Studio, то есть разделены на каталоги.
- Создайте структуру каталогов, которая моделирует разделы, которые вы хотите отображать
- Для каждого шаблона создайте каталог для хранения файлов
Возьмите простой пример типа Enum, который должен быть flags. У нас есть каталог FlagEnum, который содержит
FlagEnum.cs
namespace $rootnamespace$
{
using System;
/// <summary>
///
/// </summary>
[Flags]
public enum $safeitemrootname$
{
// Suggest using hex rather than decimals as below to avoid overlapping/missing values
A = 0x1,
B = 0x2,
C = 0x4,
D = 0x8,
E = 0x10,
F = Ox20
}
}
MyTemplate.vstemplate
<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
<TemplateData>
<DefaultName>Flags.cs</DefaultName>
<Name>Flag Enum</Name>
<Description>Enum that is meant to be a set of flags</Description>
<ProjectType>CSharp</ProjectType>
<SortOrder>10</SortOrder>
<Icon Package="{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}" ID="4515" />
</TemplateData>
<TemplateContent>
<References />
<ProjectItem SubType="Code" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">Enum.cs</ProjectItem>
</TemplateContent>
</VSTemplate>
Затем у нас есть файл MSBUIlD для создания zip-файла - он использует расширение Community Tasks для получения возможности Zip
<?xml version="1.0" encoding="UTF-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<!-- Import a bunch of external targets -->
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<!-- The templates we want to produce -->
<ItemGroup>
<ItemTemplate Include="FlagEnum" />
<!--
<ItemTemplate Include="GlobalConfigurationTask">
<Category>Configuration\</Category>
</ItemTemplate>
-->
</ItemGroup>
<!-- Ok, standard action is to create clean zip files -->
<Target Name="Build" DependsOnTargets="Clean;Zip;" />
<Target Name="Clean">
<!-- Need this for the first time through when Build doesn't exist -->
<MakeDir Directories="Build" Condition="!Exists('Build')" />
<!-- Can't delete it if it has contents, so delete them first -->
<Delete Include="Build\**\*.*" Condition="!Exists('Build')" />
<RemoveDir Directories="Build" />
<MakeDir Directories="Build" Condition="!Exists('Build')" />
</Target>
<Target Name="Zip" Outputs="%(ItemTemplate.Identity)" >
<MakeDir Directories="Build\%(ItemTemplate.Category)" Condition="%(ItemTemplate.Category) != ''" />
<CreateItem Include="$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)\**\*.*" Exclude="$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)\**\_svn\**\*.*;$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)\**\.svn\**\*.*">
<Output TaskParameter="Include" ItemName="ZipFiles" />
</CreateItem>
<Zip Files="@(ZipFiles)" ZipFileName="$(MSBuildProjectDirectory)\Build\%(ItemTemplate.Category)%(ItemTemplate.Identity).zip" WorkingDirectory="$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)" />
</Target>
</Project>
Это создаст структуру каталогов Build со всеми заархивированными шаблонами в их правильном расположении. Затем вы просто копируете это в соответствующий каталог \ Templates \ ItemTemplates \ Visual C #