ImageOptimizer — пошаговые обновления расширения Visual Studio
В этом руководстве показаны все шаги, необходимые для добавления поддержки Visual Studio 2022 при сохранении поддержки Visual Studio 2019 с помощью расширения оптимизатора изображений в качестве примера.
Это должно быть тщательное руководство с ссылками на коммиты в git на каждом шаге, но вы можете увидеть выполненный PR здесь: https://github.com/madskristensen/ImageOptimizer/pull/46
.
У нас также есть дополнительные примеры в конце этого руководства.
Шаг 1. Модернизация проекта
См. модернизации проекта.
Сначала мы обновляем проекты VSIX и модульного тестирования до .NET 4.7.2 на странице свойств соответствующих проектов.
Оптимизатор изображений ссылается на некоторые старые пользовательские пакеты 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.
Добавление нового общего проекта в решение
Добавьте ссылку на общий проект в проект VSIX.
Переместите файлы исходного кода (cs, xaml, resx) в новый общий проект с исключением для следующих элементов:
source.extension.vsixmanifest
- Файлы метаданных для расширения (значки, лицензии, заметки о выпуске и т. д.)
- VSCT-файлы
- Связанные файлы
- Внешние средства или библиотеки, которые необходимо включить в VSIX
Теперь переместите все метаданные, файлы VSCT, связанные файлы и внешние инструменты и библиотеки в общее расположение и добавьте их в качестве связанных элементов в проект VSIX. Не удалять
source.extension.vsixmanifest
.git commit 73ba920 - перемещение файлов
git commit d5e36b2: добавление внешних инструментов/библиотек
- Для этого проекта необходимо переместить значок расширения, VSCT-файл и внешние средства в новую папку
ImageOptimizer\Resources
. Скопируйте их в общую папку и удалите их из проекта VSIX. - Они добавлены обратно в качестве связанных элементов, и если элементы уже связаны, они могут оставаться как есть (например, лицензия).
- Убедитесь, что действие сборки и другие свойства заданы правильно в добавленных связанных файлах, выбрав каждую из них и проверив окно инструментов свойств. Для нашего проекта нам пришлось задать следующее:
Установите для действия сборки
icon.png
значениеContent
и установите флаг Включить в VSIX на значениеtrue
Задайте для действия сборки
ImageOptimizer.vsct
значениеVSCTComplile
и для включения в VSIX задайте значениеfalse
Задайте для всех файлов в
Resources\Tools
действие сборкиContent
и установите "Включить в VSIX" в значениеtrue
.Кроме того,
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, как показано выше, и задать действие сборки по мере необходимости.
- Для этого проекта необходимо переместить значок расширения, VSCT-файл и внешние средства в новую папку
Создайте проект, чтобы проверить изменения и устранить любые ошибки или проблемы. Ознакомьтесь с разделом часто задаваемых вопросов по распространённым проблемам.
Шаг 3 — Добавьте проект VSIX для Visual Studio 2022
См. добавление целевого Visual Studio 2022 для в.
Добавьте в решение новый проект VSIX.
Удалите любой дополнительный исходный код в новом проекте, кроме
source.extension.vsixmanifest.
Добавьте ссылку на общий проект.
Добавьте связанные файлы из вашего проекта VSIX для Visual Studio 2019 и проверьте, что их свойства "Действие сборки" и "Включить в VSIX" совпадают. Кроме того, скопируйте файл
source.extension.vsixmanifest
, мы изменим его позже для поддержки Visual Studio 2022.Попытка сборки показывает, что отсутствует ссылка на
System.Windows.Forms
. Просто добавьте его в проект Visual Studio 2022 и перестройте.+ <Reference Include="System.Windows.Forms" />
Обновите ссылки на пакеты
Microsoft.VisualStudio.SDK
иMicrosoft.VSSDK.BuildTools
до версий для Visual Studio 2022.Заметка
Это последние версии, доступные при создании этого руководства. Рекомендуется получить последние версии.
-<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" />
Измените файл
source.extension.vsixmanifest
, чтобы ориентировать его на Visual Studio 2022.Установите тег
<InstallationTarget>
, чтобы он соответствовал Visual Studio 2022 и указать нагрузку amd64.<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)"> <ProductArchitecture>amd64</ProductArchitecture> </InstallationTarget>
Измените предварительные требования, чтобы включить только 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
- Сканирует документы и заменяет вкладки пробелами или наоборот
- PeekF1
Дальнейшие действия
Подготовьтесь к обновлению расширения, прочитав это руководство от начала до конца.