6

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

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

我目前的配置如下:

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

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

<向导扩展>

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

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

</WizardExtension>

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

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

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

4

3 回答 3

2

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

在你的情况下,它应该是:

<WizardExtension>
 <Assembly>My.Assembly</Assembly>
 <FullClassName>My.Assembly.Wizard</FullClassName>
</WizardExtension>
于 2012-07-23T04:54:01.037 回答
1

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

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

  1. 我在同一个解决方案中有 VSIX 项目、项目模板和向导实现。
  2. VSIX 和向导实现在同一个项目中。
  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. 通过以管理员身份从 VS2015 命令提示符启动 VS exp 实例,从 VS 实验实例卸载扩展:

    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,该文件具有 assets 类型。

  2. 查找 Asset Type="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

于 2017-05-31T02:22:28.417 回答
0

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

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

(请注意,我确实找到了一些其他人,因为我已经在 AssemblyInfo 文件中更改了公司名称等,所以可能是旧的那些也导致了这种情况)

于 2019-10-21T00:23:16.390 回答