2011-02-23 47 views
13

我为VS 2010创建了部署项目模板的扩展。项目模板使用自定义向导(在特定程序集中),当我基于此模板创建新项目时会调用该向导。我想要在VSIX中包含包含向导的程序集,以便它可以在模板可以找到的地方部署(我知道GAC不是VSIX的选项)。使用VSIX部署包含用于项目模板的IWizard的程序集

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

我的问题是:如何使用VSIX包部署项目模板和它需要的组件?

谢谢您的帮助

编辑:我改变了向导集引用的VSIX子路径在两个安装项目,并相应更新了vsixmanifest内容集引用“ProjectTemplates”。它现在似乎工作。

+0

我发现多了一个有用的答案[这里] [1] [1]:http://stackoverflow.com/questions/16244185/using-iwizard-in-an-item-template-without -installing-assembly-in-gac/16894895#16894895 –

回答

16

您不需要在GAC中获得包含IWizard实现的程序集。您可以简单地在Extension.vsixmanifest文件中将其声明为内容部分中的Assembly element

不幸的是,这似乎没有被记录在任何地方。

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

+0

谢谢,我已根据您提供的页面取消了内容标记。 vsixmanifest的GUI生成了一个奇怪的引用,像| AssemblyName |。但是项目模板仍然没有找到程序集。我如何告诉它在哪里可以找到组件? –

+0

我找到了解决方案并更新了问题。 –

+0

你能否用更多的细节更新你的问题?你究竟改变了哪些文件,以及如何?谢谢。 – l33t

4

我没有运用Assembly元素技术来工作,所以如果有其他人遇到同样的问题,这是另一种解决方案。

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

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

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

(其中X表示包GUID,但我怀疑任何GUID都行)。

+0

这对我有效太。谢谢!! – gab

+0

@itowlson 如何创建.pkgdef文件?你有没有使用任何工具?因为在添加新项目我没有得到.pkgdef文件的选项 – Neo

+0

我创建了一个简单的.pkgdef文件添加了给定的[$ RootKey,但它没有按预期工作 – Neo

2

这个工作对我来说:

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

但是组装元件不能正常工作。

+0

我未能创建.pkgdef文件,是否有任何实用程序,我直接创建了一个具有相同扩展名的文件,并将其添加到上面,但是我无法使用此VSIX创建项目。同样的错误出现:(你能帮我吗 – Neo

相关问题