Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 在项目模板中使用IWizard而不在GAC中安装程序集?_Visual Studio 2010_Visual Studio_Templates_Wizard - Fatal编程技术网

Visual studio 2010 在项目模板中使用IWizard而不在GAC中安装程序集?

Visual studio 2010 在项目模板中使用IWizard而不在GAC中安装程序集?,visual-studio-2010,visual-studio,templates,wizard,Visual Studio 2010,Visual Studio,Templates,Wizard,我想创建一个包含向导(IWizard接口)的自定义项模板 在和其他一些地方,总是描述包含向导的程序集必须安装在GAC中。我想在我的组织中分发我的模板,并不是每个人都有权在GAC中安装任何东西 所以我想知道,有没有办法将包含向导代码的程序集放在模板zip或vsix文件中 在我看来,这应该是一个普遍的问题 关于如何在不安装GAC的情况下分发自定义向导和项目模板,有什么帮助吗?经过大量研究,我找到了一种方法。使用此方法,可以将带有IWizard实现的程序集包括到VSIX文件中,即使不对其进行签名,也可

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

在和其他一些地方,总是描述包含向导的程序集必须安装在GAC中。我想在我的组织中分发我的模板,并不是每个人都有权在GAC中安装任何东西

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

在我看来,这应该是一个普遍的问题


关于如何在不安装GAC的情况下分发自定义向导和项目模板,有什么帮助吗?

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

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

  • vsix项目(我们称之为MyExtension
  • 项目模板项目(我们称之为MyTemplate
  • 向导代码的常规类库项目(我们称之为MyWizardImpl
  • 在MyWizardImpl内部,您需要在任意类中实现IWizard接口。(我们称之为MyWizardImpl.ItemTemplateWizard1)。在编译此文件时,您可以将其作为输出

    <solutiondir>\MyWizardImpl\bin\Debug\MyWizardImpl.dll
    
    \MyWizardImpl\bin\Debug\MyWizardImpl.dll
    
    现在,在MyTemplate\MyTemplate.vstemplate中,您需要引用它

    <WizardExtension>
        <Assembly>MyWizardImpl</Assembly>
        <FullClassName>MyWizardImpl.ItemTemplateWizard1</FullClassName>
    </WizardExtension>
    
    
    MyWizardImpl
    MyWizardImpl.ItemTemplateWizard1
    
    棘手的部分排在最后:在vsix中包含程序集,以便在应用ItemTemplate时可以加载该程序集

    • 创建文件夹MyExtension\Assemblys
    • 在解决方案资源管理器中,右键单击该文件夹并选择“添加->现有项…”
    • 在“添加现有项”对话框中,导航到已创建的MyWizardImpl.dll。在“添加”按钮上,单击小箭头并选择“添加为链接”(以防止VS复制dll)
    • 在该链接的属性中,选择BuildAction=Content,IncludeInVSIX=True
    • 在XML编辑器(或记事本)中打开vsixmanifest,并向节中添加装配线
    例如:

    <Content>
       <Assembly AssemblyName="MyWizardImpl">Assemblies\MyWizardImpl.dll</Assembly>
    </Content>
    
    
    程序集\MyWizardImpl.dll
    
    生成并测试解决方案,使用模板时应立即运行向导代码


    如果在vsix中需要多个模板,只需添加额外的ItemTemplate项目。所有向导都可以进入同一个MyWizardImpl程序集中。

    将一个项目的输出作为另一个项目中的一个项包含在一起通常是很脆弱的,在这种情况下有更好的方法来处理它。您可以将类库程序集作为资源添加到VSIX项目:open source.extension.vsixmanifest并选择“Assets”选项卡,然后单击“New”,选择类型“assembly”,源代码“当前解决方案中的项目”,最后选择项目。该对话框中有一个标记为“嵌入此文件夹”的字段:只需将“程序集”放在那里。最终结果将是完全相同的,但它不会抛出MSBuild依赖项跟踪等。我认为中没有“资产”选项卡VS2010@aaron在VS2010中称为“内容”,为什么将程序集添加为“资产”或“内容”比将其添加为项目项更好?看起来几乎是一样的。不确定现在VS2013的情况如何,但至少在2010年是不可能的,在向导运行期间,实际的程序集当时不可用。