将 VS Extension 从 2015 更新到 2017 (VSIX v3) 使包无效

Updating VS Extension from 2015 to 2017 (VSIX v3) makes the package invalid

我有一个较旧的扩展,我想在 VS 2017 中使用。为了能够做到这一点,我知道我将不得不使用新的 VSIX Manifest v3。该扩展在 2015 Update 3 中运行良好。要更新它,我已完成以下操作:

  1. 在VS2017中打开扩展源。系统提示我进行一次性升级,成功完成
  2. 使用 NuGet 将 Microsot VSSDK BuildTools 从 14.x 更新到 15.x
  3. 将先决条件块添加到包含 Microsoft.VisualStudio.Component.CoreEditor
  4. 的 source.extension.vsixmanifest 文件
  5. 像这样更新安装目标以支持新的 Visual studio

    <InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Enterprise" />

构建成功,但是一旦我打开调试文件夹中的 vsix 文件,就会收到一条消息告诉我

The file is not a valid VSIX package

如果我使用 WinRAR 打开文件,我可以看到两个必需文件 catalog.jsonmanifest.json 不存在,因为它们在新的 v3 格式中应该存在。

我在这里错过了什么?

您还必须升级 BuildTools 包,您收到的错误表明这没有发生:https://docs.microsoft.com/en-us/visualstudio/extensibility/how-to-migrate-extensibility-projects-to-visual-studio-2017

事实证明,我的问题是,在 vbproj 文件(或大多数其他文件的 csproj)中,顶部有一个导入,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="..\..\packages\Microsoft.VSSDK.BuildTools.15.1.192\build\Microsoft.VSSDK.BuildTools.props" Condition="Exists('..\..\packages\Microsoft.VSSDK.BuildTools.15.1.192\build\Microsoft.VSSDK.BuildTools.props')" />
    <Import Project="..\packages\Microsoft.VSSDK.BuildTools.14.3.25407\build\Microsoft.VSSDK.BuildTools.props" Condition="Exists('..\packages\Microsoft.VSSDK.BuildTools.14.3.25407\build\Microsoft.VSSDK.BuildTools.props')" />
    ....

如您所见,此项目文件同时导入了新版本和旧版本的 BuildTools。我不确定为什么会发生这种情况,因为我所做的只是通过 NuGet 更新 VSSDK BuildTools。我还尝试完全卸载 BuildTools Force uninstall,但它似乎在我尝试的所有操作中仍然存在。

因此,如果您遇到类似问题,请查看您的 vbproj/csproj 文件,看它是否导入了旧版本的 Microsoft.VSSDK.BuildTools