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

6

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

1个回答

1

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

Visual Studio模板支持模板替换参数,因此您可以执行以下操作:

  • 在您的ProjectA.zip模板文件中,您会找到ProjectA.csproj,它是项目的模板
  • ProjectA.csproj中,您将找到包含<Reference>条目的<ItemGroup>
  • 其中应该有一个类似于<Reference Include="ProjectB">的条目

当您从ProjectB模板创建项目时,其名称将由用户指定,因此您想要使用替换参数$Foo$替换ProjectB

这就是纯模板范围之外的地方:您如何告诉Visual Studio替换$Foo$?替换是什么?

您唯一的选择是使用自定义向导,该向导要么查找ProjectB类型的项目,要么向用户请求该项目。

以下是如何使模板和自定义向导相互配合的概述:

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

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接