在项目模板中使用IWizard而无需在GAC中安装程序集?

时间:2013-04-26 19:52:55

标签: visual-studio-2010 visual-studio templates wizard

我想创建一个包含向导(IWizard界面)的自定义项模板。

http://msdn.microsoft.com/en-us/library/vstudio/ms171411%28v=vs.100%29.aspx和其他一些地方,始终会描述包含向导的程序集必须安装在GAC中。我想在我的组织中分发我的模板,并不是每个人都有权在GAC中安装任何内容。

所以我想知道,有没有办法在模板zip或vsix文件中包含包含向导代码的程序集?

在我看来,这应该是一个常见的问题?

如何在没有安装任何GAC的情况下分发自定义向导和项目模板的任何帮助?

1 个答案:

答案 0 :(得分:18)

经过大量研究,我找到了一种方法。使用此方法,可以将包含IWizard实现的程序集包含在VSIX文件中,即使不对其进行签名,也可以在运行时使用它。无需摆弄GAC。

您的解决方案需要3个项目

  1. vsix项目(我们称之为 MyExtension
  2. 项目模板项目(我们称之为 MyTemplate
  3. 向导代码的常规类库项目(我们称之为 MyWizardImpl
  4. 在MyWizardImpl中,您需要在arbitray类中实现IWizard接口。 (我们称之为MyWizardImpl.ItemTemplateWizard1)。编译时,你得到输出

    <solutiondir>\MyWizardImpl\bin\Debug\MyWizardImpl.dll
    

    现在,在MyTemplate \ MyTemplate.vstemplate中,您需要引用它

    <WizardExtension>
        <Assembly>MyWizardImpl</Assembly>
        <FullClassName>MyWizardImpl.ItemTemplateWizard1</FullClassName>
    </WizardExtension>
    

    棘手的部分是最后一个:在应用ItemTemplate时,可以加载vsix中的程序集。

    • 创建文件夹MyExtension \ Assemblies
    • 在解决方案资源管理器中,右键单击该文件夹,然后选择添加 - &gt;现有项目......
    • 在“添加现有项”对话框中,导航到创建的MyWizardImpl.dll。在添加按钮上,单击小箭头并选择“添加为链接”(以防止VS制作dll的副本)
    • 在此链接的属性中,选择BuildAction = Content,IncludeInVSIX = True
    • 在XML编辑器(或记事本)中打开vsixmanifest,并在部分中添加装配线

    示例:

    <Content>
       <Assembly AssemblyName="MyWizardImpl">Assemblies\MyWizardImpl.dll</Assembly>
    </Content>
    

    构建并测试解决方案,使用模板时,向导代码应立即运行。

    如果您的vsix中需要多个模板,则只需添加其他ItemTemplate项目即可。所有向导都可以进入相同的MyWizardImpl程序集。