在项目模板中使用本地IWizard程序集作为WizardExtension

时间:2011-11-28 17:23:18

标签: visual-studio-2010 assemblies wizard project-template visual-studio-templates

我有一个非常简单的IWizard实现,其唯一目的是将一个参数变量添加到字典中(不需要用户交互)。

如果可能,我不想将其添加到GAC。

我将dll放在模板zip文件的根目录中,并带有vstemplate文件,并在WizardExtension部分引用了该名称:

<WizardExtension>
    <Assembly>Wizard.dll</Assembly>
    <FullClassName>Wizard.Wizard</FullClassName>
</WizardExtension>

我希望这会找到并使用程序集的本地副本,但它似乎不起作用。

在没有安装到GAC的情况下,有没有办法使用IWizard实现?

2 个答案:

答案 0 :(得分:2)

我终于检查了here所描述的解决方案。

我们的想法是,我们必须将实现IWizard的程序集添加到GAC或Visual Studio使用程序集探测机制查找的任何其他位置。 VS在C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE处查找靠近自己的模板程序集(devenv.exe)。它还包含两个子目录:PrivateAssembliesPublicAssemblies

我不确定是否需要使用强名称密钥签署我们的程序集(在我的情况下我使用签名的程序集)。你可以轻松检查。

所以, 如果我没有弄错,就不可能强制直接从你的模板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中注册。