为visual studio创建多项目模板时,有没有办法在根模板文件中使用参数?

Mag*_*pie 14 templates visual-studio

我正在尝试创建一个多项目模板.我希望子项目名称包含解决方案名称.我尝试了以下但是$ safeprojectName $由于某种原因在根模板中不起作用.它尝试使用名称中的$ safeprojectName $创建文件夹,而不是实际的项目名称.

<VSTemplate Version="2.0.0" Type="ProjectGroup"
  xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>Default Solution</Name>
    <Description>An example of a multi-project template</Description>
    <Icon>Icon.ico</Icon>
    <ProjectType>CSharp</ProjectType>
  </TemplateData>
  <TemplateContent>
    <ProjectCollection>
      <SolutionFolder Name="$safeprojectName$.Web">
        <ProjectTemplateLink ProjectName="$safeprojectName$.Web">
          Src\Web\MyTemplate.vstemplate
        </ProjectTemplateLink>
      </SolutionFolder>
    </ProjectCollection>
  </TemplateContent>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)

我已经对此做了大量的阅读,并且已经使用IWizard接口创建了一个程序集,该接口创建了一个参数$ solutionName $.然后我使用了以下模板.

<VSTemplate Version="2.0.0" Type="ProjectGroup"
  xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>Default Solution</Name>
    <Description>An example of a multi-project template</Description>
    <Icon>Icon.ico</Icon>
    <ProjectType>CSharp</ProjectType>
  </TemplateData>
  <TemplateContent>
    <ProjectCollection>
      <SolutionFolder Name="$solutionName$.Web">
        <ProjectTemplateLink ProjectName="$solutionName$.Web">
          Src\Web\MyTemplate.vstemplate
        </ProjectTemplateLink>
      </SolutionFolder>
    </ProjectCollection>
  </TemplateContent>
  <WizardExtension>
    <Assembly>DefaultSoloutionWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=f753ddb61a28cb36, processorArchitecture=MSIL</Assembly>
    <FullClassName>DefaultSoloutionWizard.WizardImplementation</FullClassName>
  </WizardExtension>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)

然而,这也会因同样的问题而失败.我是不是想做不可能的事?对此的任何帮助都是最受欢迎的.

And*_*per 5

从Visual Studio 2013 Update 2开始,您现在可以在根.vstemplate文件中的ProjectTemplateLink元素上使用CopyParameters属性。根模板中定义的任何参数将在链接模板中以“ ext_”为前缀提供。

例如,如果根模板定义了参数$ Foo $,则参数$ ext_Foo $将在链接的项目中具有相同的值。

有关更多详细信息,请参见http://msdn.microsoft.com/zh-cn/library/ms171398.aspx


Joh*_*ers 2

您可能需要查看Guidance Automation Toolkit。其中有相当多的内容需要消化,但它可以做的部分工作是将基于向导的 UI 放在多项目模板上。

如果您想查看相关示例,请查看Service Factory,它可以部分基于向导创建整个解决方案结构。