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


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

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

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

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

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

коммит Git e052465

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

Повышение версии Framework

Оптимизатор изображений ссылается на некоторые старые пользовательские пакеты 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 требуется добавить новый общий проект, содержащий исходный код расширения, который будет совместно использоваться между проектами Visual Studio 2019 и Visual Studio 2022 VSIX.

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

    коммит abf249d

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

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

    git коммит e8e941e

    Добавление ссылки на общий проект

  3. Переместите файлы исходного кода (cs, xaml, resx) в новый общий проект с исключением для следующих элементов:

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

    коммит Git f31f051

    Перемещение файлов в общий проект

  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.

        Добавление связанных файлов в проект VSIX

      • Кроме того, 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.

    создание нового проекта VSIX

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

    commit Git dd49cb2

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

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

    коммит git 98c43ee

    Добавление связанных файлов в проект VSIX

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

    коммит Git de71ccd

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

    коммит Git 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 9d393c7

    1. Установите тег <InstallationTarget>, чтобы он соответствовал Visual Studio 2022 и указать нагрузку amd64.

      <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
          <ProductArchitecture>amd64</ProductArchitecture>
      </InstallationTarget>
      
    2. Измените предварительные требования, чтобы включить только 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" />
      

Ну вот и всё!

Благодаря этому сборка теперь создает Visual Studio 2019 и Visual Studio 2022 VSIX-файлы.

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

  • proPower Tools
    • PeekF1
      • Позволяет заглянуть в веб-браузер для просмотра сведений о выбранном классе или объекте.
    • FixMixedTabs
      • Сканирует документы и заменяет вкладки пробелами или наоборот

Дальнейшие действия

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