6

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

4

1 回答 1

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.

于 2014-03-01T16:37:23.227 回答