4

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

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

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

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

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

有什么方法可以在IWizard不安装到 GAC 的情况下使用实现?

4

2 回答 2

2

我终于检查了这里描述的解决方案。

这个想法是我们必须将实现 IWizard 的程序集添加到 GAC 或 Visual Studio 使用程序集探测机制查看的任何其他位置。VS 在C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE. 它还在两个子目录中查找:PrivateAssembliesPublicAssemblies.

我不确定是否需要使用强名称密钥对我们的程序集进行签名(我在我的情况下使用签名的)。你可以很容易地检查它。

因此,如果我没记错的话,不可能强制从您的模板 zip 文件中直接使用程序集。为了使我的模板的使用和更新更容易,我将创建一个小型安装项目。

最后一点。据我所知,您不得在 Assembly 标记中指定程序集的 .dll 扩展名。以下是我为向导扩展程序集编写 vstemplate 部分的方法:

  <WizardExtension>
    <Assembly>WpfTaskTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=22050f445905b871</Assembly>
    <FullClassName>WpfTaskTemplateWizard.UIWizard</FullClassName>
  </WizardExtension>
于 2012-01-07T02:13:29.133 回答
1

我知道这有点老了(并且线程启动器已经放弃了这个问题),但是解决这个问题的一个非常迷人的方法是使用Export Template Wizard。您可以将项目模板导出为 VSIX 插件,并将向导程序集与插件一起打包。无需以这种方式在 GAC 中注册。

于 2012-09-26T09:28:53.767 回答