Поделиться через


ImageOptimizer — пошаговое обновление расширения Visual Studio

В этом руководстве будут показаны все действия, необходимые для добавления поддержки Visual Studio 2022 при сохранении поддержки Visual Studio 2019 с использованием расширения Image Optimizer в качестве примера.
Это подробное руководство с ссылками на git commit в каждом шаге, но вы также можете посмотреть окончательный PR здесь: https://github.com/madskristensen/ImageOptimizer/pull/46.

Кроме того, в конце этого руководства приводятся дополнительные примеры.

Шаг 1. Модернизация проекта

См. Модернизация проекта.

git commit e052465

Сначала мы переносим VSIX и проект модульного теста в .NET 4.7.2 на странице свойств проектов.

Framework version bump

Image Optimizer ссылался на некоторые старые специальные пакеты 14.* и 15.*. Вместо этого мы установим пакет NuGet Microsoft.VisualStudio.Sdk, который консолидирует все необходимые ссылки.

-  <ItemGroup>
-    <PackageReference Include="Madskristensen.VisualStudio.SDK">
-      <Version>14.0.0-beta4</Version>
-    </PackageReference>
-    <PackageReference Include="Microsoft.VSSDK.BuildTools">
-      <Version>15.8.3247</Version>
-      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
-      <PrivateAssets>all</PrivateAssets>
-    </PackageReference>
-  </ItemGroup>

+  <ItemGroup>
+    <PackageReference Include="Microsoft.VisualStudio.SDK">
+      <Version>16.9.31025.194</Version>
+    </PackageReference>
+  </ItemGroup>

Сборка проекта успешно выполнена, и мы получаем несколько предупреждений о потоках. Мы исправляем эти предупреждения, щелкая ctrl и . и используя IntelliSense, чтобы добавить недостающие строки переключения потоков.

Шаг 2. Рефакторинг исходного кода в общий проект

См. Общие проекты.

Для поддержки Visual Studio 2022 необходимо добавить новый общий проект, содержащий исходный код расширения, которое будет совместно использоваться в проектах VSIX Visual Studio 2019 и Visual Studio 2022.

  1. Добавление нового общего проекта в решение

    git commit abf249d

    Add shared project

  2. Добавьте ссылку на общий проект в свой проект VSIX.

    git commit e8e941e

    Add shared project reference

  3. Переместите в новый общий проект файлы исходного кода (CS, XAML, RESX) за исключением следующих:

    • source.extension.vsixmanifest
    • файлов метаданных расширения (значков, лицензий, заметок о выпуске и т. д.);
    • VSCT-файлов;
    • Связанные файлы
    • внешних инструментов или библиотек, которые необходимо включить в VSIX.

    git commit f31f051

    Move files to shared project

  4. Теперь переместите все метаданные, VSCT-файлы, связанные файлы, внешние инструменты и библиотеки в общее расположение и снова добавьте их в качестве связанных элементов в проект VSIX. Не удаляйте source.extension.vsixmanifest.

    git commit 73ba920 — перемещение файлов

    git commit d5e36b2 — добавление внешних инструментов и библиотек

    1. Для этого проекта необходимо переместить значок расширения, VSCT-файл и внешние инструменты в новую папку ImageOptimizer\Resources. Скопируйте их в эту общую папку и удалите из проекта VSIX.
    2. Снова добавьте их в качестве связанных элементов, и, если какие-то элементы уже связаны, их можно оставить в том же виде (например, лицензию).
    3. Убедитесь, что действие сборки и другие свойства в добавленных связанных файлах заданы правильно, выбирая каждый файл и проверяя окно инструментов "Свойства". Для нашего проекта нам пришлось задать следующее:
      • задать для действия сборки icon.png значение Content и установить "Включить в VSIX" как true;

      • задать для действия сборки ImageOptimizer.vsct значение VSCTComplile и установить "Включить в VSIX" как false;

      • задать для всех действий сборки для файлов в Resources\Tools значение Content и установить "Включить в VSIX" как true.

        Add linked files to VSIX project

      • Кроме того, ImageOptimizer.cs является зависимостью ImageOptimizer.vsct. Для этого нам нужно вручную добавить эту зависимость в CSPROJ-файл.

        - <Content Include="..\SharedFiles\ImageOptimizer.vsct">
        -   <Link>ImageOptimizer.vsct</Link>
        - </Content>
        - <Compile Include="..\SharedFiles\ImageOptimizer.cs">
        -   <Link>ImageOptimizer.cs</Link>
        - </Compile>
        
        + <VSCTCompile Include="..\SharedFiles\ImageOptimizer.vsct">
        +   <ResourceName>Menus.ctmenu</ResourceName>
        +   <Generator>VsctGenerator</Generator>
        +   <LastGenOutput>..\SharedFiles\ImageOptimizer.cs</LastGenOutput>
        + </VSCTCompile>
        + <Compile Include="..\SharedFiles\ImageOptimizer.cs">
        +   <AutoGen>True</AutoGen>
        +   <DesignTime>True</DesignTime>
        +   <DependentUpon>..\SharedFiles\ImageOptimizer.vsct</DependentUpon>
        + </Compile>
        
      • Если окно инструментов "Свойства" не позволяет задать конкретное действие сборки, можно вручную изменить CSPROJ-файл, как делалось выше, и задать действие сборки, как необходимо.

  5. Выполните сборку проекта, чтобы проверить внесенные изменения и исправить все ошибки. Описание распространенных проблем см. в разделе Вопросы и ответы.

Шаг 3. Добавление проекта VSIX Visual Studio 2022

См. раздел Добавление целевого объекта Visual Studio 2022.

  1. Добавьте новый проект VSIX в решение.

  2. Удалите весь дополнительный исходный код в новом проекте, за исключением source.extension.vsixmanifest.

    Create a new VSIX project

  3. Добавьте ссылку в общий проект.

    git commit dd49cb2

    Add reference to shared project

  4. Добавьте связанные файлы из проекта VSIX Visual Studio 2019 и проверьте соответствие свойств "Действие сборки" и "Включить в VSIX". Также скопируйте файл source.extension.vsixmanifest, который позднее мы изменим для поддержки Visual Studio 2022.

    git commit 98c43ee

    Add Linked files to VSIX project

  5. Попытка сборки показывает, что отсутствует ссылка на System.Windows.Forms. Просто добавьте ее в проект Visual Studio 2022 и перестройте его.

    git commit de71ccd

    + <Reference Include="System.Windows.Forms" />
    
  6. Обновите ссылки на пакеты Microsoft.VisualStudio.SDK и Microsoft.VSSDK.BuildTools, указав версии Visual Studio 2022.

    git commit d581fc3

    Примечание.

    Это последние версии, доступные на момент создания этого руководства. Рекомендуется использовать самые последние доступные версии.

    -<PackageReference Include="Microsoft.VisualStudio.SDK" Version="16.0.206" />
    +<PackageReference Include="Microsoft.VisualStudio.SDK" Version="17.0.0-preview-1-31216-1036" />
    -<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="16.10.32" />
    +<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="17.0.63-Visual Studio 2022-g3f11f5ab" />
    
  7. Измените файл source.extension.vsixmanifest, чтобы он указывал целевой объект Visual Studio 2022.

    git commit 9d393c7

    1. Задайте тег <InstallationTarget>, чтобы в нем были указаны Visual Studio 2022 и полезные данные amd64.

      <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
          <ProductArchitecture>amd64</ProductArchitecture>
      </InstallationTarget>
      
    2. Измените Prerequisite, включив только Visual Studio 2022 и более поздние версии.

      - <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,)" DisplayName="Visual Studio core editor" />
      + <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[17.0,)" DisplayName="Visual Studio core editor" />
      

Теперь все готово.

В результате сборка создает VSIX-файлы Visual Studio 2019 и Visual Studio 2022.

Другие примеры

  • Инструменты ProPower
    • PeekF1
      • Позволяет просматривать в веб-браузере справочную информацию о выбранном классе или объекте.
    • FixMixedTabs
      • Сканирует документы и заменяет знаки табуляции пробелами и наоборот.

Следующие шаги

Подготовьтесь к обновлению расширения, ознакомившись с этим пошаговым руководством.