我有一个非常简单的IWizard
实现,其唯一目的是将一个参数变量添加到字典中(不需要用户交互)。
如果可能,我不想将其添加到GAC。
我将dll
放在模板zip文件的根目录中,并带有vstemplate
文件,并在WizardExtension
部分引用了该名称:
<WizardExtension>
<Assembly>Wizard.dll</Assembly>
<FullClassName>Wizard.Wizard</FullClassName>
</WizardExtension>
我希望这会找到并使用程序集的本地副本,但它似乎不起作用。
在没有安装到GAC的情况下,有没有办法使用IWizard
实现?
答案 0 :(得分:2)
我终于检查了here所描述的解决方案。
我们的想法是,我们必须将实现IWizard的程序集添加到GAC或Visual Studio使用程序集探测机制查找的任何其他位置。 VS在C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
处查找靠近自己的模板程序集(devenv.exe)。它还包含两个子目录:PrivateAssemblies
和PublicAssemblies
。
我不确定是否需要使用强名称密钥签署我们的程序集(在我的情况下我使用签名的程序集)。你可以轻松检查。
所以, 如果我没有弄错,就不可能强制直接从你的模板zip文件中使用程序集 。为了更轻松地使用和更新我的模板,我将创建一个小型安装项目。
最后一点。据我所知,您不能在Assembly标记中指定程序集的.dll扩展名。以下是我为向导扩展程序集编写vstemplate部件的方法:
<WizardExtension>
<Assembly>WpfTaskTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=22050f445905b871</Assembly>
<FullClassName>WpfTaskTemplateWizard.UIWizard</FullClassName>
</WizardExtension>
答案 1 :(得分:1)
我知道这有点老了(线程初学者已经放弃了这个问题),但解决这个问题的一个非常有魅力的方法是使用Export Template Wizard。您可以将项目模板导出为VSIX插件,并将向导程序集与插件一起打包。无需以这种方式在GAC中注册。