【问题标题】:How do you install a Visual Studio 2017 Extension (VSIX) from an MSI如何从 MSI 安装 Visual Studio 2017 扩展 (VSIX)
【发布时间】:2018-07-28 20:32:13
【问题描述】:

Visual Studio 2017 似乎在可扩展性方面改变了很多东西 https://docs.microsoft.com/en-us/visualstudio/extensibility/breaking-changes-2017

以前关于从 MSI 安装 VSIX 的建议现在似乎已过时 (Deploying VSIX using MSI installer),但现在似乎没有关于如何执行此操作的信息。

VS2017 FAQ 表示可以(应该?)手动启动 VSIX 安装程序,现在这是推荐方法吗?

vsixinstaller.exe /q /appidinstallpath:"c:\program files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" /appidname:"Visual Studio" /logFile: /skuName:企业 /skuVersion:15.0.25810.0 "KendoUI.Mvc.VSPackage.vsix"

它还要求您知道 vsixinstaller.exe 的路径。这是从哪里来的? 更新似乎MS工具vsixbootstrapper会找到vsixinstaller.exe并将你的参数传递给它,所以不需要直接找到它)

你还需要知道所有安装的visual studio版本,看起来比Programmatically finding the VS2017 installation directory要复杂。

是我遗漏了什么还是现在真的很复杂?

【问题讨论】:

  • 微软彻底搞砸了 IMO。非常沮丧。

标签: windows-installer vsix vs-extensibility visual-studio-2017


【解决方案1】:

现在真的很复杂。安装扩展可以触发 VS 安装程序安装所需的工作负载,当两者都通过 MSI 发生时会失败。已经讨论过如何使其适用于 WiX,结论是如果不更改 VSIXInstaller.exe 的工作方式,就不可能使其安全工作:http://lists.wixtoolset.org/pipermail/wix-devs-wixtoolset.org/2017-February/thread.html

【讨论】:

  • 不是我想听到的,但它是有道理的。我猜想在 MSI 安装完成后启动 VSIX 安装程序会稍微避开这一步,但会使卸载复杂化/妥协。如果他们对如何处理这个问题有任何明确性,你能更新这个线程吗?
【解决方案2】:

经过一些研究,我认为目前我们有以下选择:

  1. 在 VS 扩展内容和其他所有内容之间拆分安装工作负载:扩展进入市场并从 Visual Studio 中安装。看起来这是 MS 正在推动每个人的计划。旧 MSI 中无法进入扩展的所有其他内容仍然必须以其他方式部署。您可以继续在您的扩展代码中实施一些检查,以测试是否安装了其他东西,并引导用户访问 MSI,以防万一丢失。 WIX 工具现在使用这个方案来安装他们的 VS 扩展(来自 gallery...呃:Marketplace)。而且,用户必须单独安装 MSI...
  2. 使用自定义方法(自定义操作等)定位找到的最新 VS 版本/实例。使用相应的 VSIXInstaller.exe 从您的 MSI 安装扩展。基本上,这对应于我们多年来喜欢它的老式方式。但是请记住以下注意事项:a)WIX 中的 VSExtension.VSIXPackage 元素现在相当无用:它没有检测到最新的 VS2017 实例(出于某些合理但不一定充分的原因,IMO)。 b) 你的扩展应该有“Visual Studio 核心编辑器”作为only的先决条件。基本上,它可能取决于触发 VSIXInstaller 时已安装的所有内容。否则,由于 Bob Arnsons answer 中列出的原因,安装将失败。 c) 如果某些 VS 进程(仍在)运行,则 VSIX 安装程序现在会在安静模式下失败。确保将它们全部关闭或在 GUI 模式下运行 VSIXInstaller,让用户有机会手动等待/退出它们。
  3. 使用VSIXBootstrapper.exe:该工具检测最新的VS版本并使用其VSIXInstaller.exe安装到所有找到的实例中。但是,上述问题仍然存在,因此不能从 MSI 而是从引导程序本身触发该工具,以便免费使用您的先决条件!工具 github 页面上提供了 sample WIX code。由于使用这种方法,扩展是由<ExePackage> 安装的,因此您将不得不考虑新的卸载策略。
  4. 以漫长而多风的方式安装您的扩展程序。这包括:
    • 检测 Visual Studio 的所有实例:对于 15 之前的所有 VS 版本,都有固定的注册表项,对于 15 及更高版本,有一个 COM API 可以从自定义操作或自定义安装脚本查询实例。
    • 将所有必需的二进制文件复制到(特定于实例版本的)文件夹中,然后
    • 在 Visual Studio 实例中执行相应的注册。

我没有深入研究选项 4。对我们来说,选项 3 就足够了。 VSIXInstaller 提供了一些有用的新命令行开关,例如 /p /sp /f 等,允许以“相当”模式执行安装。当然,如果缺少所需的先决条件或无法关闭阻塞进程,这将失败。或者当应用于较旧的 VSIX 安装程序时(对于多实例安装程序很重要!)。
进一步注意,VS2017 的 VSIXInstaller.exe 块也等待 MSBuild 关闭。我们的构建脚本正在测试新创建的安装程序……遗憾的是,它不再有效。

【讨论】:

  • 这一步“分别注册到Visual Studio实例”是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多