ImageOptimizer — пошаговое обновление расширения Visual Studio
В этом руководстве будут показаны все действия, необходимые для добавления поддержки Visual Studio 2022 при сохранении поддержки Visual Studio 2019 с использованием расширения Image Optimizer в качестве примера.
Это подробное руководство с ссылками на git commit в каждом шаге, но вы также можете посмотреть окончательный PR здесь: https://github.com/madskristensen/ImageOptimizer/pull/46.
Кроме того, в конце этого руководства приводятся дополнительные примеры.
Шаг 1. Модернизация проекта
См. Модернизация проекта.
Сначала мы переносим VSIX и проект модульного теста в .NET 4.7.2 на странице свойств проектов.
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.
Добавление нового общего проекта в решение
Добавьте ссылку на общий проект в свой проект 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>
Измените 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
- Сканирует документы и заменяет знаки табуляции пробелами и наоборот.
- PeekF1
Следующие шаги
Подготовьтесь к обновлению расширения, ознакомившись с этим пошаговым руководством.