如果您想拥有多个模板,并且还希望它们在 Visual Studio 中“漂亮”地出现(即划分为目录),则可以使用一些技巧。
- 创建一个目录结构来模拟您想要显示的部分
- 为每个模板创建一个目录来保存文件
举一个应该是标志的 Enum 类型的简单示例。我们有一个目录 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 文件 - 它使用社区任务扩展来获得 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>
这将生成一个构建目录结构,其中所有压缩模板都位于正确的位置。然后,您只需将其复制到适当的 \Templates\ItemTemplates\Visual C# 目录