visual-studio - 在不使用 devenv/setup 的情况下通过 MSI 注册解压的 VSIX 扩展

标签 visual-studio windows-installer visual-studio-extensions vsix

我们有一个 Visual Studio 扩展,当前安装了 MSI,因为我们需要在安装后执行某些任务(ngen、注册某些 COM 服务器等)。在安装结束时,我们运行 devenv.exe /setup(更具体地说,devenv.exe /setup /nosetupvstemplates 以使其更快)以在 Visual Studio 2012 及更高版本中注册扩展(2010 年不需要此步骤,因为 VS2010 会在每个启动)。

我们目前正在寻求迁移到部分 VSIX 安装,但存在某些问题:

  • 我们有一定的文件夹结构(附加的捆绑工具)。我找不到在 VSIX 包中包含任意文件夹和文件的选项。这可能吗?
  • 我们试图避免使用 devenv.exe /setup ,因为在极少数情况下,这可能会导致无法加载扩展(如 Remco Mulder 在 MSDN forums 上的详细说明)。
  • 我们仍然需要执行“安装后”操作,目前无法使用 VSIX。
  • 由于之前的“罪孽”,我们硬编码了一些路径以使用 VSIX 包过去遵循的 CompanyName\ProductName\Version 格式,但现在似乎 VSIX 随机生成了一个文件夹名称(正如 Jason 在下面的回答中提到的)。

  • 所以我本质上想要的是能够安装一个“解压”的 VSIX 包 - 让 MSI 安装程序在磁盘上创建文件结构(在正确的位置, %VSInstallDir%\Common7\IDE\Extensions\Company\Product\Version ),然后以某种方式让 VSIX 使用 .vsixmanifest 文件来在 Visual Studio 中注册扩展。

    (对扩展管理器 API 的初步挖掘表明,在 CreateInstalledExtension 中有一个名为 ExtensionManagerService 的方法,该方法接受 vsixmanifest 的路径,在程序集 Microsoft.VisualStudio.ExtensionManager.Implementation.dll 中,但不幸的是它是内部的)。

    因此,在不诉诸 API 黑客的情况下,是否有任何替代方法可以在不使用 devenv /setup 的情况下在 Visual Studio(2012 及更高版本)中安装扩展?

    最佳答案

    正如杰森(和其他所有人)所建议的那样 - 是的,在外部注册 Visual Studio 包的“正确”(受支持)方法是运行 devenv.exe /setup ,并且在大多数情况下 - 它可以正常工作(尽管速度很慢,因为整个 Visual Studio 配置正在重建)。

    这是一个商业产品,每隔一段时间我们就会收到一个支持案例,提示安装我们的扩展后,Visual Studio 中发生了一些不好的事情 - 其他扩展无法加载,解决方案资源管理器出现问题等。这些情况很少见,但它们确实发生了。

    为了尽量减少安装我们的扩展对用户机器的影响,我试图找到一种合适的方法来使用不使用 devenv.exe /setup 的 VSIX 安装机制。 ,但不幸的是,没有一个受支持的方案可以处理我在上述问题中提出的所有问题。

    经过对问题的广泛研究,我found 无证,不受支持 完全解决问题的解决方案!一个空文件,名为 extensions.configurationchanged , 位于 %VSInstallDir%\Common7\IDE\Extensions获取 touched 每次安装或卸载 VSIX 包时,都会导致 Visual Studio 在下次重新启动时刷新它的包缓存(仅限!)!通过修改此文件的“上次修改日期”,它本质上会导致 Visual Studio 的行为就像刚刚安装或卸载 VSIX 包一样。

    将扩展文件复制到空配置单元的一些快速实验,然后触摸 extensions.configurationchanged将导致 Visual Studio 在下次重新启动时加载扩展(并处理其所有 .pkgdef 文件) - 否 devenv /setup必要的!

    一些商业产品在他们的在线帮助的故障排除部分提供了这个解决方案,处理他们的扩展加载失败,所以这个解决方案可能是我正在寻找的“较小的邪恶”。

    使用风险自负。

    关于visual-studio - 在不使用 devenv/setup 的情况下通过 MSI 注册解压的 VSIX 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300278/

    相关文章:

    c++ - 使用 Release Build 本身启动 Visual Studio 项目

    c# - 调试多维数组 C#

    windows-services - 卸载 Windows 服务时安装的产品与安装源不匹配错误

    windows-installer - 如何 CI-CD Windows 安装程序?我希望部署将 .msi 放置在特定位置

    c# - 如何使 Visual Studio 扩展的构建失败

    c# - 自定义测试适配器未在测试资源管理器上显示测试

    c++ - CMake 生成器表达式到链接器

    visual-studio - 如何在 Visual Studio 2008 中更改 'code definition' 窗口的背景颜色?

    wix - Windows 应用程序注册表设置和指南

    c# - 在 Visual Studio 扩展中打开标准对话框