【问题标题】:Unable To Reference Wizard Assembly in VSIX Deployed Template无法在 VSIX 部署的模板中引用向导程序集
【发布时间】:2012-06-22 19:51:22
【问题描述】:

我正在尝试为 Visual Studio 2010 创建一个包含一些项目模板的 VISX 扩展。这些模板不是很复杂,但我想在创建过程中通过向导为它们公开一些额外的配置。我已成功设置我的 VISX 包以将模板部署到 VS2010 中我想要的目录结构,但是当我尝试配置和运行向导时,当我按照以下行创建模板时收到错误:

错误:此模板试图加载组件程序集 'My.Assembly,版本 1.0.0.0,Culture=neutral,PublicKeyToken=...

我目前的配置如下:

  • 所有项目都在同一个解决方案中。
  • VISX 项目包括对包含向导的项目和每个模板的项目引用。
  • 每个模板都是从一个项目模板模板构建的(...令人困惑的术语)。
  • 它们通过 .vsixmanifest 设计器作为内容添加,引用项目。
  • 每个 .vstemplate 文件都有一个 WizardExtension 元素,指向 IWizard 实现并包含程序集。
  • 向导程序集已签名。

.vstemplate 文件指向它们的向导,如下所示:

My.Assembly,版本=1.0.0.1,文化=中性,PublicKeyToken=a494da9e6e53f845,自定义=null 组装>

My.Assembly.Wizard

据我所知,这就是我应该这样做的方式。到底出了什么问题?看起来它找不到程序集。为了使程序集对模板可见,我还需要采取任何其他步骤吗?该程序集在安装时被部署到扩展文件夹(我验证了这一点),所以它至少是成功的。我需要对 .vstemplate 文件做些什么特别的事情来告诉他们查看扩展文件夹和 GAC 吗?我是不是错过了什么?

请注意,我在 Internet 上找到了几个页面,说明我必须手动或使用脚本 GAC 程序集。然而,很少有人有我的确切情况(项目模板模板被 VISX 项目引用,大多数示例使用通过项目模板向导导出的常规项目并将其包转储到 VISX 文件夹结构中)。我发现唯一符合我的场景的是微软的一个例子。我试图匹配它,但可惜它仍然不起作用。我尝试重新定位我下载的项目以在此问题中引用,但我无法再次找到它。

使用脚本是我们之前的做法,但我想尝试使用 VISX 包让事情变得更简洁。我想避免这种情况,但如果必须编写 VISX 脚本以将模板安装到 GAC,我可以这样做。

【问题讨论】:

    标签: visual-studio-2010 templates wizard


    【解决方案1】:

    通过 VSIX Extension 部署基于向导的项目模板时,最好在 .vstemplate 中使用 Short-Named 程序集。这样可以避免 GAC 部署。

    在你的情况下,应该是:

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

    【讨论】:

    • 抱歉,这花了很长时间才回复,直到我解决了问题之后,我才真正看到答案。这确实是这个问题的一部分,虽然还有一些其他的配置问题(即需要通过 UI 添加项目引用,手动编辑配置文件由于某种原因无法正常工作)。我接受,因为这是主要问题。
    • 如果您愿意,我认为您可以提供任何详细信息以供讨论。至少我今年在为我们公司的产品做入门套件时遇到了很多问题。
    • 这对我没有帮助。一切正常,突然我开始收到此错误。我已经尝试重新启动我控制下的几乎所有东西。任何意见都非常感谢。
    【解决方案2】:

    我正在使用 VS2015,时不时遇到这个问题。当我开始使用 Wizard 实现构建 VSIX 项目时,一段时间(4-6 周)一切正常,然后突然停止工作。几周后,它会重新开始工作并停止工作,恕不另行通知。我花了很长时间才找到解决方法(仍然不知道为什么会突然停止)。

    这就是我的 VSIX 项目的构建方式

    1. 我有 VSIX 项目、项目模板和向导实现 相同的解决方案。
    2. VSIX 和 Wizard 实现在同一个项目中。
    3. 在 VSIX 项目 source.extension.vsixmanifest 中添加了 VSIX 项目 dll 和项​​目模板作为资产。
    4. 项目模板 *.vstemplate 具有向导部分,它引用具有强名称的 VSIX 项目:

      <WizardExtension>
          <Assembly>Test.Template.TemplateInstallerWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ab381f68dc4f5e</Assembly>
          <FullClassName>Test.Template.TemplateInstallerWizard.WizardImplementation</FullClassName>
        </WizardExtension>
      

    这些都不适合我

    1. 通过工具->扩展从 VS 常规实例卸载扩展 和更新..
    2. 从 VS 实验实例卸载扩展 以管理员身份从 VS2015 命令提示符启动 VS exp 实例:

      devenv.exe /rootsuffix exp

      然后通过工具->扩展和更新卸载扩展..

    3. 使用@Ethan Wu 解释的短命名程序集。

    4. 从以管理员身份启动的 VS2015 命令提示符通过此命令安装模板:

      devenv /installvstemplates

    5. 重启VS2015,我的机器在这个过程中多次。

    这对我有用(感谢@Ethan Wu)

    1. 从 VSIX 项目中删除证书。

    2. 从项目模板 *.vstemplate 中删除强名称 文件
    3.     <WizardExtension>
            <Assembly>Test.Template.TemplateInstallerWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly>
        <FullClassName>Test.Template.TemplateInstallerWizard.WizardImplementation
      

    4. 清理并构建项目。
    5. 从 VS 常规实例中删除扩展并关闭 VS2015(不是 绝对需要)
    6. 安装扩展。
    7. 打开新的 VS2015 实例并尝试使用 向导。


    有助于调试的几件事

    1. 构建 VSIX 项目时,bin\debug 文件夹中的文件是 创建了具有资产类型的 -extension.vsixmanifest。

    2. 查找资产类型="Microsoft.VisualStudio.Assembly": AssemblyName 值是项目模板中的预期值 *.vstemplate WizardExtension 部分 - 它们应该完全匹配。

    3. 安装扩展后,转到 VS2015 扩展位置 本地盒子:

      %appdata%\..\Local\Microsoft\VisualStudio\14.0\Extensions\<some_temp_folder>
      

      打开 extension.vsixmanifest 以确保 Asset Type="Microsoft.VisualStudio.Assembly" AssemblyName 值为 正确填充。如果需要,您可以更改此值并 重启 VS2015 使其生效。

    希望这对某人有所帮助并节省大量时间,因为向导和自定义项目模板的帮助很少。

    谢谢,

    RDV

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,但是当我更新我的向导项目的AssemblyVersion 时,我的问题就暴露了。我检查了清单文件中的版本,发现它们应该匹配。

      我只是进入C:\Users\Albert\AppData\Local\Microsoft\VisualStudio\16.0_c340331cExp\Extensions,找到了我的扩展并在那里删除了它。现在它又可以工作了。

      (请注意,自从我在 AssemblyInfo 文件中更改了公司名称等之后,我确实找到了一些其他人,所以可能是旧的也造成了这种情况)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 1970-01-01
        相关资源
        最近更新 更多