【发布时间】:2012-07-06 08:22:23
【问题描述】:
我有一个包含多个项目的解决方案,我们称它们为 ProjectA 和 ProjectB。我需要 ProjectA 来引用 ProjectB,但是当我“导出模板”时,我似乎无法保留引用。我想做的是让它在我创建新项目时为我创建引用,然后自动将其命名为我输入的内容。
【问题讨论】:
标签: visual-studio-2010 visual-studio project-template project-reference
我有一个包含多个项目的解决方案,我们称它们为 ProjectA 和 ProjectB。我需要 ProjectA 来引用 ProjectB,但是当我“导出模板”时,我似乎无法保留引用。我想做的是让它在我创建新项目时为我创建引用,然后自动将其命名为我输入的内容。
【问题讨论】:
标签: visual-studio-2010 visual-studio project-template project-reference
这稍微超出了纯 Visual Studio 模板的范围。
Visual Studio 模板支持模板的替换参数,所以你可以做的是:
ProjectA.zip 模板文件中,您将找到ProjectA.csproj,这是项目的模板ProjectA.csproj 中,您将找到一个包含<Reference> 条目的<ItemGroup>
<Reference Include="ProjectB">的条目
当您从 ProjectB 模板创建项目时,其名称将由用户指定,因此您希望将 ProjectB 替换为 $Foo$ 之类的替换参数。
这就是它超出纯模板范围的地方:你如何告诉 Visual Studio 替换 $Foo$?替代品会是什么?
您在这里唯一的选择是使用自定义向导,该向导要么查找 ProjectB 类型的项目,要么向用户询问。
以下是如何让模板和自定义向导相处的大纲:
[ProvideBindingPath] 属性添加到您的包中。这是注册自定义向导所必需的(否则您需要将其安装到 GAC,以便 VS 找到它)Microsoft.VisualStudio.TemplateWizard.IWizard
在模板的 .vstemplate 文件中,在 <TemplateContent> 块下方添加以下 sn-p:
<WizardExtension>
<Assembly>Your.Packages.Assembly</Assembly>
<FullClassName>Your.Wizard</FullClassName>
</WizardExtension>
这将在创建项目时显示您的向导。您可以在RunStarted 方法中打开一个对话框,要求提供参考,或者您可以使用automationObject 参数(实际上是EnvDTE.DTE 实例)尝试查找ProjectB 项目并在replacementsDictionary.
【讨论】: