Partilhar via


ImageOptimizer - Atualize 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 git commit para cada etapa, mas você está livre para ver o PR finalizado aqui: https://github.com/madskristensen/ImageOptimizer/pull/46.

Também temos amostras adicionais no final deste guia.

Etapa 1 - Modernizar o projeto

Veja Modernizar o projeto.

git commit e052465

Primeiro, atualizamos o VSIX e o projeto de teste de unidade para .NET 4.7.2 nas propriedades dos projetos.

Aumento de versão do Framework

O Image Optimizer fez referência a alguns pacotes personalizados antigos de 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 é concluída com sucesso e recebemos alguns avisos relacionados com threads. Corrigimos esses avisos clicando em ctrl e . 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.

  1. Adicionar um novo projeto compartilhado à sua solução

    git commit abf249d

    Adicionar projeto compartilhado

  2. Adicione uma referência ao projeto compartilhado ao seu projeto VSIX.

    git commit e8e941e

    Adicionar referência de projeto partilhado

  3. Mova seus arquivos de código-fonte (cs, xaml, resx) para o novo projeto compartilhado exceto para 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

    git commit f31f051

    Mover arquivos para projeto compartilhado

  4. 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 remover source.extension.vsixmanifest.

    git commit 73ba920 - Movendo arquivos

    git commit d5e36b2 - Adicionando ferramentas/bibliotecas externas

    1. 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.
    2. Adicionou-os novamente como itens vinculados e, se os itens já estiverem vinculados, os itens podem permanecer como estão (licença, por exemplo).
    3. Valide se a Ação de compilação e outras propriedades estão definidas corretamente nos arquivos vinculados adicionados selecionando cada um e verificando a janela da ferramenta de propriedades. Para o nosso projeto, tivemos que definir o seguinte:
      • Defina icon.png Build Action como Content e marque Include in VSIX como true

      • Configure a Ação de Compilação de ImageOptimizer.vsct para VSCTComplile e defina para incluir no VSIX como false

      • Defina toda a ação de compilação dos arquivos em Resources\Tools como Content e marque Incluir no VSIX como true

        Adicionar arquivos vinculados ao projeto VSIX

      • Além disso, ImageOptimizer.cs é uma dependência de ImageOptimizer.vsct, 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.

  5. Crie seu projeto para validar suas alterações e corrigir quaisquer erros/problemas. Consulte a secção Perguntas Mais Frequentes para problemas comuns.

Etapa 3 - Adicionar um projeto VSIX do Visual Studio 2022

Veja Adicionar alvo do Visual Studio 2022.

  1. Adicione um novo projeto VSIX à sua solução.

  2. Remova qualquer código-fonte adicional no novo projeto, exceto source.extension.vsixmanifest.

    Criar um novo projeto VSIX

  3. Adicione uma referência ao seu projeto compartilhado.

    git commit dd49cb2

    Adicionar referência ao projeto compartilhado

  4. 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 arquivo source.extension.vsixmanifest, vamos modificá-lo mais tarde para oferecer suporte ao Visual Studio 2022.

    git commit 98c43ee

    Adicionar arquivos vinculados ao projeto VSIX

  5. Uma tentativa de compilação mostra que nos falta uma referência a System.Windows.Forms. Basta adicioná-lo ao nosso projeto Visual Studio 2022 e reconstruir.

    git commit de71ccd

    + <Reference Include="System.Windows.Forms" />
    
  6. Atualiza as referências de pacote Microsoft.VisualStudio.SDK e Microsoft.VSSDK.BuildTools para as versões do Visual Studio 2022.

    git commit d581fc3

    Observação

    Estas são as versões mais recentes disponíveis quando este guia foi criado. Recomenda-se que 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" />
    
  7. Edite o ficheiro source.extension.vsixmanifest para refletir a compatibilidade com o Visual Studio 2022.

    git commit 9d393c7

    1. Defina a etiqueta <InstallationTarget> para refletir o Visual Studio 2022 e indicar um pacote amd64:

      <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
          <ProductArchitecture>amd64</ProductArchitecture>
      </InstallationTarget>
      
    2. Modifique o pré-requisito para incluir apenas o Visual Studio 2022 e superior:

      - <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 já está!

Com isso, a criação agora produz VSIXes do Visual Studio 2019 e do Visual Studio 2022.

Outras amostras

  • Ferramentas ProPower
    • PeekF1
      • Permite espreitar um navegador da Web com informações de ajuda sobre a classe/objeto selecionado.
    • FixMixedTabs
      • Verifica os seus documentos e substitui separadores por espaços ou vice versa.

Próximos passos

Prepare-se para atualizar sua extensão lendo este guia do início ao fim.