Обновление VS Extension с 2015 по 2017 (VSIX v3) делает пакет недействительным

У меня есть старое расширение, которое я хотел бы заставить работать в VS 2017. Чтобы иметь возможность сделать это, я понимаю, что мне придется использовать новый VSIX Manifest v3. Расширение отлично работает в обновлении 2015 года. Чтобы обновить его, я сделал следующее:

  1. Откройте источник расширения в VS2017. Мне предлагается сделать однократное обновление, которое успешно завершено
  2. Используйте NuGet для обновления Microsot VSSDK BuildTools с 14.x до 15.x
  3. Добавьте блок Prerequisite в файл source.extension.vsixmanifest, содержащий Microsoft.VisualStudio.Component.CoreEditor
  4. Обновите цель установки, чтобы она также поддерживала новую Visual Studio следующим образом.

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

Сборка прошла успешно, но как только я открою файл vsix в своей папке отладки, получаю сообщение, сообщающее мне

The file is not a valid VSIX package

Если я открою файл с помощью WinRAR, я вижу, что два обязательных файла catalog.json а также manifest.json не там, как они должны в новом формате v3.

Что мне здесь не хватает?

2 ответа

Решение

Оказалось, что моя проблема заключалась в том, что внутри файла 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. Я не уверен, почему это происходит, так как все, что я делал, это обновлял VSSDK BuildTools через NuGet. Я также пытался полностью удалить галочку BuildTools Force uninstall но, похоже, осталось все, что я пытался.

Поэтому, если у вас возникли аналогичные проблемы, посмотрите на файл vbproj/csproj, если он имеет импорт для более старых версий Microsoft.VSSDK.BuildTools

Вы также должны обновить пакет BuildTools. Полученная ошибка указывает на то, что этого не произошло: https://docs.microsoft.com/en-us/visualstudio/extensibility/how-to-migrate-extensibility-projects-to-visual-studio-2017

Другие вопросы по тегам