ImageOptimizer - Atualizar uma extensão do Visual Studio passo a passo
Este guia mostrará todas as etapas necessárias para adicionar suporte ao Visual Studio 2022 enquanto mantém o suporte ao Visual Studio 2019 usando a extensão Image Optimizer como um estudo de caso.
Este é destinado a ser um guia completo com links de confirmação git para cada etapa, mas você é livre para ver o PR finalizado aqui: https://github.com/madskristensen/ImageOptimizer/pull/46.
Também temos amostras adicionais no final deste guia.
Passo 1 - Modernizar o projeto
Consulte Modernizar o projeto.
Primeiro, colocamos o projeto VSIX e de teste de unidade no .NET 4.7.2 na página de propriedades dos projetos:
O Image Optimizer fez referência a alguns pacotes personalizados antigos 14.* e 15.*, em vez disso, instalaremos o Microsoft.VisualStudio.Sdk
pacote NuGet que consolida todas as nossas referências necessárias.
- <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>
A construção do projeto é bem-sucedida e recebemos alguns avisos de threading. Corrigimos esses avisos clicando ctrl
e .
usando o intellisense para adicionar as linhas de comutação de thread ausentes.
Etapa 2 - Refatorar o código-fonte em um projeto compartilhado
Consulte Projetos compartilhados.
O suporte ao Visual Studio 2022 requer a adição de um novo projeto compartilhado que conterá o código-fonte da extensão, que será compartilhado entre os projetos VSIX do Visual Studio 2019 e do Visual Studio 2022.
Adicionar um novo projeto compartilhado à sua solução
Adicione uma referência ao projeto compartilhado ao seu projeto VSIX.
Mova seus arquivos de código-fonte (cs, xaml, resx) para o novo projeto compartilhado, exceto o seguinte:
source.extension.vsixmanifest
- Arquivos de metadados de extensão (ícones, licenças, notas de versão, etc.)
- Arquivos VSCT
- Arquivos vinculados
- Ferramentas ou bibliotecas externas que precisam ser incluídas no VSIX
Agora mova todos os metadados, arquivos VSCT, arquivos vinculados e ferramentas/bibliotecas externas para um local compartilhado e adicione-os novamente como itens vinculados ao projeto VSIX. Não remova
source.extension.vsixmanifest
.git commit 73ba920 - Movendo arquivos
git commit d5e36b2 - Adicionando ferramentas/bibliotecas externas
- Para este projeto, precisamos mover o ícone de extensão, arquivo VSCT e ferramentas externas para nossa nova pasta
ImageOptimizer\Resources
. Copie-os para a pasta compartilhada e remova-os do projeto VSIX. - Adicionou-os novamente como itens vinculados e, se os itens já estiverem vinculados, os itens podem permanecer como estão (licença, por exemplo).
- Valide se a Ação de Criação e outras propriedades estão definidas corretamente nos arquivos vinculados adicionados, selecionando cada uma delas e verificando a janela da ferramenta de propriedades. Para o nosso projeto tivemos que definir o seguinte:
Defina
icon.png
Build Action como e marque Include in VSIX comoContent
true
Definir
ImageOptimizer.vsct
ação de compilação paraVSCTComplile
e incluir no VSIX comofalse
Defina toda a Ação de compilação dos arquivos em
Resources\Tools
eContent
marcada como Incluir no VSIX comotrue
Além disso, é uma dependência do
ImageOptimizer.vsct
,ImageOptimizer.cs
para isso temos que adicionar manualmente essa dependência ao arquivo 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>
Se a janela da ferramenta de propriedades impedir que você defina uma Ação de Compilação específica, você poderá modificar manualmente o csproj conforme feito acima e definir a Ação de Compilação conforme necessário.
- Para este projeto, precisamos mover o ícone de extensão, arquivo VSCT e ferramentas externas para nossa nova pasta
Crie seu projeto para validar suas alterações e corrigir quaisquer erros/problemas. Verifique a seção Perguntas frequentes para problemas comuns.
Etapa 3 - Adicionar um projeto VSIX do Visual Studio 2022
Consulte Adicionar destino do Visual Studio 2022.
Adicione um novo projeto VSIX à sua solução.
Remova qualquer código-fonte adicional no novo projeto, exceto para
source.extension.vsixmanifest.
Adicione uma referência ao seu projeto compartilhado.
Adicione os arquivos vinculados do seu projeto VSIX do Visual Studio 2019 e valide se as propriedades "Build Action" e "Include in VSIX" correspondem. Além disso, copie seu
source.extension.vsixmanifest
arquivo, vamos modificá-lo mais tarde para dar suporte ao Visual Studio 2022.Uma tentativa de construção mostra que estamos perdendo uma referência ao
System.Windows.Forms
. Basta adicioná-lo ao nosso projeto do Visual Studio 2022 e reconstruir.+ <Reference Include="System.Windows.Forms" />
Referências de atualização
Microsoft.VisualStudio.SDK
eMicrosoft.VSSDK.BuildTools
pacote para as versões do Visual Studio 2022.Observação
Estas são as versões mais recentes disponíveis quando este guia foi criado. Recomenda-se que você obtenha as versões mais recentes disponíveis.
-<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 seu
source.extension.vsixmanifest
arquivo para refletir a segmentação do Visual Studio 2022.Defina a tag para refletir o
<InstallationTarget>
Visual Studio 2022 e indicar uma carga amd64:<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)"> <ProductArchitecture>amd64</ProductArchitecture> </InstallationTarget>
Modifique o pré-requisito para incluir apenas o Visual Studio 2022 e versões 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" />
E pronto!
Com isso, a compilação agora produz VSIXes do Visual Studio 2019 e do Visual Studio 2022.
Outras amostras
- Ferramentas ProPower
- EspiarF1
- Permite espiar em um navegador da Web com informações de ajuda sobre a classe/objeto selecionado.
- FixMixedTabs
- Digitaliza seus documentos e substitui guias por espaços ou vice-versa
- EspiarF1
Próximas etapas
Prepare-se para atualizar sua extensão lendo este guia do início ao fim.