为Visual Studio 2008创建具有文件依赖性的项模板是否可能?

时间:2009-09-03 12:55:24

标签: visual-studio-2008 templates vsx

我有一个模板,可以在Visual Studio的解决方案资源管理器中的项目的“添加 - >新项”右键单击菜单中添加一个新条目。

我已经构建了模板,将其放入我的文档文件夹下的ItemTemplates目录中,并且它可以工作,因为我可以通过模板向项目添加新项目。

但是,该模板由3个文件组成:

<filename>.controller
<filename>.Designer.cs
<filename>.cs

这些是在同一级别添加到项目中的,但是我希望在向项目添加表单时获得相同类型的层次结构,其中.Designer.cs文件作为子项放置.cs文件下的节点。

基本上,这就是项目的样子:

TestProject
  +- Properties
  +- References
  +- App.config
  +- Program.cs
  +- MyTestController.controller
  +- MyTestController.Designer.cs
  +- MyTestController.cs

虽然我希望它看起来像这样:

TestProject
  +- Properties
  +- References
  +- App.config
  +- Program.cs
  +- MyTestController.controller
     +- MyTestController.Designer.cs
     +- MyTestController.cs
这可能吗?如果是这样,我在.vstemplate文件中更改了什么才能获得此行为?

这是我添加到模板zip文件中的.vstemplate文件:

<VSTemplate Version="2.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>LVK.NET New Controller</Name>
        <Description>Adds an business logic controller class to the project.</Description>
        <Icon Package="{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}" ID="4522" />
        <ProjectType>CSharp</ProjectType>
        <SortOrder>10</SortOrder>
        <DefaultName>Controller.controller</DefaultName>
    </TemplateData>
    <TemplateContent>
        <References>
            <Reference>
                <Assembly>System</Assembly>
            </Reference>
            <Reference>
                <Assembly>System.Data</Assembly>
            </Reference>
            <Reference>
                <Assembly>System.Xml</Assembly>:\
            </Reference>
            <Reference>
                <Assembly>LVK.Core</Assembly>
            </Reference>
            <Reference>
                <Assembly>LVK.BusinessLogic</Assembly>
            </Reference>
        </References>
        <ProjectItem ReplaceParameters="true">Controller.controller</ProjectItem>
        <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$.Designer.cs">Controller.Designer.cs</ProjectItem>
        <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$.cs">Controller.cs</ProjectItem>
    </TemplateContent>
</VSTemplate>

2 个答案:

答案 0 :(得分:1)

在项目文件中指定“层次结构”(例如.csproj):

<ItemGroup>
  <Compile Include="Controller.controller" />
  <Compile Include="Controller.cs">
    <DependentUpon>Controller.controller</DependentUpon>
  </Compile>
  <Compile Include="Controller.Designer.cs">
    <DependentUpon>Controller.controller</DependentUpon>
  </Compile>
</ItemGroup>

并将项目文件添加到.vstemplate

  <TemplateContent>
    <Project TargetFileName="Project1.csproj" File="Project1.csproj" ReplaceParameters="true">
      <ProjectItem ReplaceParameters="false" TargetFileName="Controller.controller">Controller.controller</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Controller.cs">Controller.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Controller.Designer.cs">Controller.Designer.cs</ProjectItem>
    </Project>
  </TemplateContent>

完成; - )

答案 1 :(得分:0)

从属文件需要这样引用“父”文件:

    <ProjectItem ReplaceParameters="true">Controller.controller</ProjectItem>
    <ProjectItem ReplaceParameters="true" TargetFileName="Controller.controller\$fileinputname$.Designer.cs">Controller.Designer.cs</ProjectItem>
    <ProjectItem ReplaceParameters="true" TargetFileName="Controller.controller\$fileinputname$.cs">Controller.cs</ProjectItem>