13

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

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

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

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

谢谢您的帮助

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

4

3 回答 3

16

您不需要在 GAC 中获取包含 IWizard 实现的程序集。您可以简单地在您的 extension.vsixmanifest 文件中将其声明为 Content 部分中的Assembly 元素

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

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

于 2011-02-24T00:22:26.503 回答
4

我对组装元素技术的工作没有运气,所以如果其他人遇到同样的问题,这里有另一种解决方案。

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

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

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

(其中 X 代表包 GUID,尽管我怀疑任何 GUID 都可以)。

于 2011-11-02T03:04:47.833 回答
2

这对我有用:

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

但是组装元素不起作用。

于 2012-07-17T12:11:37.273 回答