【问题标题】:Deploy assembly containing IWizard for project template with VSIX使用 VSIX 为项目模板部署包含 IWizard 的程序集
【发布时间】:2011-02-23 11:28:36
【问题描述】:

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

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

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

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

感谢您的帮助

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

【问题讨论】:

标签: visual-studio-2010 deployment wizard vsix


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我已经根据您提供的页面更新了内容标签。 vsixmanifest 的 GUI 生成了一个奇怪的引用,类似于 |AssemblyName|。但是项目模板仍然没有找到程序集。我如何告诉它在哪里可以找到程序集?
  • 能否请您更新您的问题并提供更多详细信息?您究竟更改了哪些文件,以及如何更改?谢谢。
【解决方案2】:

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

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 都可以)。

【讨论】:

  • @itowlson 如何创建 .pkgdef 文件?你用过什么工具吗?因为在添加新项目时我没有获得 .pkgdef 文件的选项
  • 我创建了一个简单的 .pkgdef 文件,添加了 [$RootKey 但它没有按预期工作
【解决方案3】:

这对我有用:

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

但是汇编元素不起作用。

【讨论】:

  • 我未能创建 .pkgdef 文件,是否有任何实用程序,我直接创建了一个具有相同扩展名的文件并将上面的行添加到该文件中,但我未能使用此 VSIX 创建一个项目出现错误:(你能帮帮我吗
猜你喜欢
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2016-06-09
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多