使用VSIX为项目模板部署包含IWizard的程序集

时间:2011-02-23 11:28:37

标签: visual-studio-2010 deployment wizard vsix

我为VS 2010创建了一个部署项目模板的扩展。项目模板使用基于此模板创建新项目时调用的自定义向导(在特定程序集中)。

我想在VSIX中打包包含向导的程序集,以便它可以在模板可以找到的地方部署(我知道GAC不是VSIX的选项)。

基本上,如果我将程序集部署到GAC,请安装VSIX,然后创建项目,成功调用向导。 如果我在不首先部署程序集的情况下执行相同操作,则在创建项目时项目模板找不到程序集。

我的问题是:如何使用VSIX包部署项目模板及其所需的程序集?

感谢您的帮助

编辑:我在安装程序项目中将向导程序集引用的VSIX子路径更改为“ProjectTemplates”,并相应地更新了vsixmanifest内容程序集引用。它似乎现在有效。

3 个答案:

答案 0 :(得分:16)

您无需在GAC中获取包含IWizard实现的程序集。您可以在extension.vsixmanifest文件中将其声明为内容部分中的Assembly element

不幸的是,这似乎没有在任何地方得到很好的记录。

唯一棘手的部分是确保AssemblyName属性具有正确的值。

答案 1 :(得分:4)

我没有运气装配元素技术,所以万一其他人遇到同样的问题,这是另一个解决方案。

Visual Studio使用BindingPaths注册表项查找向导DLL。如果在BindingPaths的子项中添加包含DLL的文件夹,则Visual Studio将找到您的DLL。

要从VSIX执行此操作,请在VSIX项目中创建.pkgdef文件。将其在VSIX属性中的Include设置为True,并将以下文本粘贴到其中:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"$PackageFolder$"=""

(其中X代表包GUID,但我怀疑任何GUID都会这样做。)

答案 2 :(得分:2)

这对我有用:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"$PackageFolder$"=""

但是汇编元素不起作用。