在Visual Studio中导出模板时如何添加相同的解决方案项目引用?

时间:2012-07-05 21:13:57

标签: visual-studio-2010 visual-studio project-template project-reference

我有一个包含多个项目的解决方案,我们称之为ProjectA和ProjectB。我需要ProjectA引用ProjectB,但是当我“导出模板”时,我似乎无法保留引用。我要做的是在创建新项目时让它为我创建引用,然后自动将其命名为我输入的内容。

1 个答案:

答案 0 :(得分:1)

这稍微超出了纯Visual Studio模板的范围。

Visual Studio模板支持模板的替换参数,因此您可以做的是:

  • ProjectA.zip模板文件中,您会找到ProjectA.csproj,这是项目的模板
  • ProjectA.csproj中,您会找到包含<ItemGroup>条目的<Reference>
  • 其中应该是<Reference Include="ProjectB">
  • 之类的条目

当您从ProjectB模板创建项目时,它的名称将由用户指定,因此您希望将ProjectB替换为$Foo$等替换参数。

这是纯模板范围之外的地方:你如何告诉visual studio取代$Foo$?替换会是什么?

您唯一的选择就是使用自定义向导,该向导会查找ProjectB类型的项目或向用户询问它。

以下是如何让模板和自定义向导相处的大纲:

  • 创建一个VSIX包项目。
  • 请务必将[ProvideBindingPath]属性添加到您的包中。这是注册自定义向导所必需的(否则您需要将其安装到GAC,因此VS可以找到它)
  • 创建向导,它应该实现Microsoft.VisualStudio.TemplateWizard.IWizard
  • 将模板添加到解决方案中,并将其作为ProjectTemplate资产添加到包的vsixmanifest中

在模板的.vstemplate文件中,在<TemplateContent>块下添加以下代码段:

<WizardExtension>
  <Assembly>Your.Packages.Assembly</Assembly>
  <FullClassName>Your.Wizard</FullClassName>
</WizardExtension>

这将在创建项目时启动向导。您可以在RunStarted方法中打开一个对话框,询问引用,或者您可以使用automationObject参数(实际上是EnvDTE.DTE实例)来尝试查找ProjectB项目并在replacementsDictionary

中提供其名称