Share via


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.

Confirmação do Git E052465

Primeiro, colocamos o projeto VSIX e de teste de unidade no .NET 4.7.2 na página de propriedades dos projetos:

Framework version bump

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.

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

    git commit abf249d

    Add shared project

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

    git commit e8e941e

    Add shared project reference

  3. 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

    git commit f31f051

    Move files to shared project

  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 remova 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 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 como Contenttrue

      • Definir ImageOptimizer.vsct ação de compilação para VSCTComplile e incluir no VSIX como false

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

        Add linked files to VSIX project

      • 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.

  5. 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.

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

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

    Create a new VSIX project

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

    git commit dd49cb2

    Add reference to shared project

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

    git commit 98c43ee

    Add Linked files to VSIX project

  5. 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.

    git commit de71ccd

    + <Reference Include="System.Windows.Forms" />
    
  6. Referências de atualização Microsoft.VisualStudio.SDK e Microsoft.VSSDK.BuildTools pacote 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 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" />
    
  7. Edite seu source.extension.vsixmanifest arquivo para refletir a segmentação do Visual Studio 2022.

    git commit 9d393c7

    1. 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>
      
    2. 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

Próximas etapas

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