ImageOptimizer: actualización de una extensión de Visual Studio paso a paso
En esta guía se mostrarán todos los pasos necesarios para agregar compatibilidad con Visual Studio 2022 mientras se mantiene la compatibilidad con Visual Studio 2019 mediante la extensión Image Optimizer como caso práctico.
Está pensada para ser una guía exhaustiva con vínculos de confirmación de Git para cada paso, pero aquí puede ver la PR finalizada: https://github.com/madskristensen/ImageOptimizer/pull/46.
Al final de esta guía también se incluyen ejemplos adicionales.
Paso 1: Modernización del proyecto
Vea Modernización del proyecto.
En primer lugar, el proyecto VSIX y la prueba unitaria se escalan a .NET 4.7.2 en la página de propiedades de los proyectos:
Image Optimizer hace referencia a algunos paquetes 14.* y 15.* personalizados antiguos; en su lugar, se instalará el paquete NuGet Microsoft.VisualStudio.Sdk
que consolida todas las referencias necesarias.
- <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>
La compilación del proyecto se realiza correctamente y se generan algunas advertencias de subprocesos. Para corregir estas advertencias, se hace clic en ctrl
y .
, y se usa IntelliSense para agregar las líneas de cambio de subproceso que faltan.
Paso 2: Refactorización del código fuente en un proyecto compartido
Para admitir Visual Studio 2022 es necesario agregar un nuevo proyecto compartido que contendrá el código fuente de la extensión que se compartirá entre los proyectos VSIX de Visual Studio 2019 y Visual Studio 2022.
Adición de un proyecto nuevo a la solución
Agregue una referencia al proyecto compartido al proyecto VSIX.
Cambie los archivos de código fuente (cs, xaml, resx) al nuevo proyecto compartido excepto lo siguiente:
source.extension.vsixmanifest
- Archivos de metadatos de extensión (iconos, licencias, notas de la versión, etc.)
- Archivos VSCT
- Archivos vinculados
- Herramientas o bibliotecas externas que se deben incluir en VSIX
Ahora. mueva todos los metadatos, archivos VSCT, archivos vinculados y herramientas o bibliotecas externas a una ubicación compartida y vuelva a agregarlos como elementos vinculados al proyecto VSIX. No quite
source.extension.vsixmanifest
.Confirmación de Git 73ba920: movimiento de archivos
Confirmación de Git d5e36b2: adición de herramientas o bibliotecas externas
- Para este proyecto, es necesario mover el icono de extensión, el archivo VSCT y las herramientas externas a la nueva carpeta
ImageOptimizer\Resources
. Cópielos en la carpeta compartida y quítelos del proyecto VSIX. - Vuélvalos a agregar como elementos vinculados y, si ya son elementos vinculados, se pueden conservar tal y como están (la licencia, por ejemplo).
- Para comprobar que la acción de compilación y otras propiedades están establecidas correctamente en los archivos vinculados agregados, seleccione cada una de ellas y compruebe la ventana de herramientas de propiedades. Para nuestro proyecto tuvimos que establecer lo siguiente:
Se ha establecido la acción de compilación
icon.png
enContent
y se ha marcado Incluir en VSIX comotrue
Se ha establecido la acción de compilación
ImageOptimizer.vsct
enVSCTComplile
e Incluir en VSIX enfalse
Se han establecido todas las acciones de compilación de los archivos de
Resources\Tools
enContent
y se marcado Incluir en VSIX comotrue
Además,
ImageOptimizer.cs
es una dependencia deImageOptimizer.vsct
, por lo que hay que agregarla manualmente al archivo 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>
Si la ventana de herramientas de propiedades impide establecer una acción de compilación específica, puede modificar manualmente el archivo csproj como se ha hecho antes y establecer la acción de compilación según sea necesario.
- Para este proyecto, es necesario mover el icono de extensión, el archivo VSCT y las herramientas externas a la nueva carpeta
Compile el proyecto para validar los cambios y corregir cualquier error o problema. Consulte la sección Preguntas más frecuentes para ver los problemas comunes.
Paso 3: Adición de un proyecto VSIX de Visual Studio 2022
Vea Adición de un destino de Visual Studio 2022.
Agregue un proyecto VSIX nuevo a la solución.
Quite cualquier código fuente adicional en el nuevo proyecto, excepto para
source.extension.vsixmanifest.
Agregue una referencia al proyecto compartido.
Agregue los archivos vinculados del proyecto VSIX de Visual Studio 2019 y compruebe que sus propiedades "Acción de compilación" e "Incluir en VSIX" coinciden. Copie también el archivo
source.extension.vsixmanifest
, que se modificará más adelante para admitir Visual Studio 2022.Un intento de compilación muestra que falta una referencia a
System.Windows.Forms
. Solo tiene que agregarla al proyecto de Visual Studio 2022 y volver a compilar.+ <Reference Include="System.Windows.Forms" />
Actualice las referencias de los paquetes
Microsoft.VisualStudio.SDK
yMicrosoft.VSSDK.BuildTools
a las versiones de Visual Studio 2022.Nota:
Estas eran las versiones más recientes disponibles cuando se ha creado esta guía. Se recomienda obtener las versiones más recientes disponibles.
-<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" />
Edite el archivo
source.extension.vsixmanifest
para reflejar la selección de Visual Studio 2022 como destino.Establezca la etiqueta
<InstallationTarget>
para que refleje Visual Studio 2022 e indique una carga de amd64:<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)"> <ProductArchitecture>amd64</ProductArchitecture> </InstallationTarget>
Modifique el requisito previo para incluir solo Visual Studio 2022 y versiones posteriores:
- <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" />
Ya ha terminado.
Con esto, ahora la compilación genera archivos VSIX de Visual Studio 2019 y Visual Studio 2022.
Otros ejemplos
- ProPower Tools
- PeekF1
- Permite ver el código sin salir en un explorador web con información de ayuda sobre la clase o el objeto seleccionados.
- FixMixedTabs
- Examina los documentos y reemplaza las tabulaciones por espacios o viceversa
- PeekF1
Pasos siguientes
Para preparar la actualización de la extensión, lea esta guía de inicio a fin.