Dela via


Uppdatera ett Visual Studio-tillägg för Visual Studio 2022

Viktig

Råden i den här artikeln kan hjälpa utvecklare att migrera tillägg som kräver stora ändringar för att fungera i både Visual Studio 2019 och Visual Studio 2022. I dessa fall rekommenderar vi att du har två VSIX-projekt och villkorlig kompilering.

Många tillägg fungerar i både Visual Studio 2019 och Visual Studio 2022 med mindre ändringar som inte kräver att du följer råden om hur du moderniserar tillägget i den här artikeln. Prova tillägget i Visual Studio 2022 och utvärdera vilket alternativ som är bäst för tillägget.

Visual Studio 2022 är en 64-bitarsprogramvara och introducerar några brytande ändringar i Visual Studio SDK. Den här artikeln beskriver de steg som krävs för att få tillägget att fungera med den aktuella förhandsversionen av Visual Studio 2022. Tillägget kan sedan vara klart för användare att installera innan Visual Studio 2022 når allmän tillgänglighet.

Installera Visual Studio och kompilera tillägg

Installera Visual Studio 2022 från Visual Studio 2022-nedladdningarna.

Tillägg skrivna på ett .NET-språk

Visual Studio SDK som riktar sig till Visual Studio 2022 för hanterade tillägg finns exklusivt på NuGet:

  • Metapaketen Microsoft.VisualStudio.Sdk (17.x-versioner) innehåller de flesta eller alla referenssammansättningar som du behöver.
  • Paketet Microsoft.VSSDK.BuildTools (17.x-versioner) bör refereras från VSIX-projektet så att det kan skapa ett Visual Studio 2022-kompatibelt VSIX.

Även om du inte hänvisar till några avgörande ändringar måste tillägg kompileras med plattformen Any CPU eller x64. Plattformen x86 är inte kompatibel med 64-bitarsprocessen i Visual Studio 2022.

Tillägg skrivna i C++

Visual Studio SDK för tillägg som kompilerats med C++ är som vanligt tillgängligt med det installerade Visual Studio SDK.

Även om du inte refererar till några brytande ändringar måste tilläggen och kompileras specifikt mot Visual Studio 2022 SDK och för AMD64.

Tillägg med kod som körs

Tillägg med kod som körs måste kompileras specifikt för Visual Studio 2022. Visual Studio 2022 läser inte in något tillägg som är avsett för en tidigare version av Visual Studio.

Lär dig hur du migrerar dina tillägg för tidigare Visual Studio-versioner till Visual Studio 2022:

  1. Modernisera dina projekt.
  2. Omstrukturera källkoden till ett delat projekt så att du kan rikta in dig på Visual Studio 2022 och äldre versioner.
  3. Lägg till ett Visual Studio 2022-riktat VSIX-projekt och en paket-/församlingsmappningstabell.
  4. Gör nödvändiga kodjusteringar.
  5. Testa Visual Studio 2022-tillägget.
  6. Publicera ditt Visual Studio 2022-tillägg.

Tillägg utan att köra kod

Tillägg som inte innehåller någon kod som körs (till exempel projekt- eller objektmallar) inte krävs för att följa föregående steg, inklusive produktion av två distinkta VSIX.

Ändra i stället en VSIX så att dess source.extension.vsixmanifest-fil deklarerar två installationsmål:

<Installation>
   <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[15.0,17.0)">
      <ProductArchitecture>x86</ProductArchitecture>
   </InstallationTarget>
   <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
      <ProductArchitecture>amd64</ProductArchitecture>
   </InstallationTarget>
</Installation>

Du kan hoppa över stegen i den här artikeln om att använda delade projekt och flera VSIX. Du kan fortsätta med test .

Not

Om du redigerar ett nytt Visual Studio-tillägg med hjälp av Visual Studio 2022 och du även vill rikta in dig på Visual Studio 2019 eller en tidigare version kan du läsa den här guiden.

MSBuild-uppgifter

Om du skapar MSBuild-uppgifter bör du tänka på att i Visual Studio 2022 är det troligt att de läses in i en 64-bitars MSBuild.exe process. Om din uppgift kräver att en 32-bitarsprocess körs kan du läsa Konfigurera mål och uppgifter för att säkerställa att MSBuild läser in uppgiften i en 32-bitarsprocess.

Modernisera ditt VSIX-projekt

Innan du lägger till Stöd för Visual Studio 2022 i tillägget rekommenderar vi starkt att du rensar upp och moderniserar ditt befintliga projekt:

  1. Migrera från packages.config till PackageReference.

  2. Ersätt eventuella direkta Visual Studio SDK-sammansättningsreferenser med PackageReference objekt:

    -<Reference Include="Microsoft.VisualStudio.OLE.Interop" />
    +<PackageReference Include="Microsoft.VisualStudio.OLE.Interop" Version="..." />
    

    Tips

    Du kan ersätta många sammansättningsreferenser med bara enPackageReference instans för metapaketet:

    -<Reference Include="Microsoft.VisualStudio.OLE.Interop" />
    -<Reference Include="Microsoft.VisualStudio.Interop" />
    -<Reference Include="Microsoft.VisualStudio.Interop.8.0" />
    +<PackageReference Include="Microsoft.VisualStudio.Sdk" Version="..." />
    

    Se till att välja paketversioner som matchar den lägsta version av Visual Studio som du riktar in dig på.

Vissa sammansättningar som inte är unika för Visual Studio SDK (till exempel Newtonsoft.Json.dll) kan ha upptäckts via en enkel <Reference Include="Newtonsoft.Json" /> referens före Visual Studio 2022. Men i Visual Studio 2022 behöver de en paketreferens i stället. Anledningen är att vissa Visual Studio-runtime- och SDK-kataloger har tagits bort från standardsökvägen för sammansättning i MSBuild.

När du växlar från direkt sammansättningsreferenser till NuGet-paketreferenser kan du hämta ytterligare sammansättningsreferenser och analyspaket eftersom NuGet automatiskt installerar den transitiva stängningen av beroenden. Detta är vanligtvis OK, men det kan resultera i ytterligare varningar under bygget. Gå igenom de här varningarna och lös så många du kan. Överväg att använda #pragma warning disable <id>-regioner i koden för att undertrycka varningar som du inte kan lösa.

Använda delade projekt för flera mål

Delade projekt är en projekttyp som introducerades i Visual Studio 2015. Med delade projekt i Visual Studio kan källkodsfiler delas mellan flera projekt och byggas på olika sätt med hjälp av villkorsstyrda kompileringssymboler och unika uppsättningar referenser.

Visual Studio 2022 kräver en distinkt uppsättning referenssammansättningar från alla tidigare Visual Studio-versioner. Därför rekommenderar vi att du använder delade projekt för att enkelt målinrikta ditt tillägg för flera versioner av Visual Studio, inklusive Visual Studio 2022, tidigare och senare versioner. Den här tekniken ger dig koddelning men distinkta referenser.

I samband med Visual Studio-tillägg kan du ha ett VSIX-projekt för Visual Studio 2022 och senare och ett VSIX-projekt för Visual Studio 2019 och tidigare. Vart och ett av dessa projekt skulle bara innehålla en source.extension.vsixmanifest instans och paketreferenserna till antingen 16.x SDK eller 17.x SDK. Dessa VSIX-projekt skulle också ha en delad projektreferens till ett nytt delat projekt som är värd för all källkod som kan delas mellan de två Visual Studio-versionerna.

Det här avsnittet förutsätter att du redan har ett VSIX-projekt som riktar sig till Visual Studio 2019 och att du vill att tillägget ska fungera i Visual Studio 2022.

Du kan slutföra alla dessa steg med hjälp av Visual Studio 2019:

  1. Om du inte redan har gjort det modernisera dina projekt för att underlätta stegen senare i den här uppdateringsprocessen.

  2. Lägg till ett nytt delat projekt i din lösning för varje befintligt projekt som refererar till Visual Studio SDK. Högerklicka på lösningen och välj sedan Lägg till>Nytt projekt.

    Skärmbild som visar val för att lägga till ett nytt projekt.

  3. I dialogrutan Lägg till ett nytt projekt söker du efter delat projektoch väljer sedan mallen Delat projekt.

    Skärmbild som visar sökning efter och val av mallen Delat projekt.

  4. Lägg till en referens från varje Visual Studio SDK-refererande projekt till dess delade projektmotsvarighet.

    Skärmbild som visar val för att lägga till en referens för delat projekt.

  5. Flytta all källkod (inklusive .cs och .resx filer) från varje Visual Studio SDK-refererande projekt till dess delade projektmotsvarighet. Lämna filen source.extension.vsixmanifest i VSIX-projektet.

    Skärmbild som visar ett delat projekt som innehåller alla källfiler.

  6. Flytta metadatafiler (till exempel viktig information, licens och ikoner) och VSCT-filer till en delad katalog. Lägg sedan till dem som länkade filer i VSIX-projektet. Observera att den delade katalogen är separat från det delade projektet.

    Skärmbild som visar val för att lägga till metadata och V S C T-filer som länkade filer.

    • För metadatafiler anger du Build Action till Content. Ange Inkludera i VSIX- till True.

      Skärmbild som visar hur man inkluderar metadatafiler i VSIX.

    • För VSCT-filer anger du Build Action till VSCTCompile. Ange Inkludera i VSIX till Falskt.

      Skärmbild som visar valda egenskaper för en V S C T-fil.

      Om Visual Studio klagar på att den här inställningen inte stöds kan du manuellt ändra byggåtgärden genom att ta bort projektet och ändra Content till VSCTCompile:

      -<Content Include="..\SharedFiles\VSIXProject1Package.vsct">
      -  <Link>VSIXProject1Package.vsct</Link>
      -</Content>
      +<VSCTCompile Include="..\SharedFiles\VSIXProject1Package.vsct">
      +  <Link>VSIXProject1Package.vsct</Link>
      +  <ResourceName>Menus.ctmenu</ResourceName>
      +</VSCTCompile>
      
  7. Skapa projektet för att bekräfta att du inte har introducerat några fel.

Projektet är nu redo att lägga till Stöd för Visual Studio 2022.

Lägga till ett Visual Studio 2022-mål

Det här avsnittet förutsätter att du har slutfört stegen för att faktor ditt Visual Studio-tillägg med delade projekt.

Lägg till Visual Studio 2022-stöd i tillägget med hjälp av följande steg. Du kan slutföra dem med hjälp av Visual Studio 2019.

  1. Lägg till ett nytt VSIX-projekt i din lösning. Det här projektet riktar sig till Visual Studio 2022. Ta bort all källkod som medföljer mallen, men behåll source.extension.vsixmanifest fil.

  2. I ditt nya VSIX-projekt lägger du till en referens till samma delade projekt som din VSIX, som riktar sig mot Visual Studio 2019, refererar till.

    Skärmbild som visar en lösning med ett delat projekt och två V S I X-projekt.

  3. Kontrollera att det nya VSIX-projektet byggs korrekt. Du kan behöva lägga till referenser som matchar ditt ursprungliga VSIX-projekt för att lösa eventuella kompilatorfel.

  4. För hanterade Visual Studio-tillägg uppdaterar du paketreferenserna från 16.x (eller tidigare) till 17.x-paketversionerna i din Visual Studio 2022-målprojektfil. Använd NuGet Package Manager eller redigera projektfilen direkt:

    -<PackageReference Include="Microsoft.VisualStudio.SDK" Version="16.0.206" />
    +<PackageReference Include="Microsoft.VisualStudio.SDK" Version="17.0" />
    -<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="16.10.32" />
    +<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="17.0" />
    

    De versioner som visas i föregående kod är bara för demonstration. I koden använder du versioner som är tillgängliga från NuGet-webbplatsen.

    I många fall har paket-ID:t ändrats. En lista över ändringar i Visual Studio 2022 finns i mappningstabellen paket/sammansättning.

    Tillägg som skrivits i C++ har ännu ingen tillgänglig SDK att kompilera med.

  5. För C++-projekt måste tillägg kompileras för AMD64. För hanterade tillägg bör du överväga att ändra ditt projekt från att kompilera för Alla CPU- till att kompilera för x64. Den ändringen säkerställer att tillägget alltid läses in i en 64-bitarsprocess i Visual Studio 2022. Vilken som helst CPU är också bra, men det kan ge varningar om du refererar till några x64-exklusiva inhemska binärfiler.

    Eventuella beroenden som tillägget kan ha på en inbyggd modul måste uppdateras från en x86-avbildning till en AMD64-avbildning.

  6. Redigera filen source.extension.vsixmanifest för att konfigurera den för Visual Studio 2022. Ange taggen <InstallationTarget> för att ange Visual Studio 2022. Ange elementet ProductArchitecture för att ange en AMD64-nyttolast.

    <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
       <ProductArchitecture>amd64</ProductArchitecture>
    </InstallationTarget>
    

    Viktig

    I Visual Studio 2019 exponerar inte designern för den här filen det nya ProductArchitecture-elementet. Du måste använda en XML-redigerare för att göra den här ändringen. Om du vill komma åt XML-redigeraren går du till Solution Explorer och väljer kommandot Öppna med.

    Elementet ProductArchitecture är kritiskt. Visual Studio 2022 installerar inte tillägget utan det.

    Element Värde Beskrivning
    ProductArchitecture x86, amd64 De plattformar som denna VSIX stöder. Inte skiftlägeskänsligt. Använd en plattform per element och ett element per InstallationTarget instans. För produktversioner som är mindre än 17,0 är standardvärdet x86 och kan utelämnas. För produktversionerna 17.0 och senare krävs det här elementet och det finns inget standardvärde. För Visual Studio 2022 är det enda giltiga innehållet för det här elementet amd64.
  7. Gör alla andra justeringar som krävs i source.extension.vsixmanifest för att matcha den som riktar sig mot Visual Studio 2019 (om någon).

    Om du publicerar två versioner av tillägget som var och en riktar in sig på en annan version av Visual Studio kontrollerar du att ID:t för VSIX i Identity-elementet i manifestet skiljer sig åt för varje tillägg.

Nu har du ett VSIX-paket riktat för Visual Studio 2022. Du bör skapa ditt Visual Studio 2022-inriktade VSIX-projekt och genomgå eventuella kompilationsfel som visas. Om du inte har byggpauser i ditt Visual Studio 2022-riktade VSIX-projekt, grattis! Du är redo för testning.

Hantera icke-bakåtkompatibla API-ändringar

Icke kompatibla API-ändringar kan kräva uppdateringar av kod som kördes i tidigare versioner av Visual Studio. För tips om hur du uppdaterar din kod, se Störande API-förändringar i Visual Studio 2022.

När du anpassar koden rekommenderar vi att du använder villkorlig kompilering. Koden kan sedan fortsätta att stödja tidigare Visual Studio-versioner samtidigt som du lägger till stöd för Visual Studio 2022.

När du får Visual Studio 2022-tillägget byggt, fortsätter du med att testa.

Använda villkorsstyrda kompileringssymboler

Om du vill använda samma källkod, även samma fil, för Visual Studio 2022 och tidigare versioner kan du behöva använda villkorlig kompilering. Du kan sedan förgrena koden för att anpassa den till oförenliga förändringar. Villkorsstyrd kompilering är en funktion i språken C#, Visual Basic och C++. Den kan användas för att dela de flesta kod samtidigt som olika API:er kan anpassas på specifika platser.

Mer information om användning av preprocessor-direktiv och villkorsstyrda kompileringssymboler finns i C#-förprocessordirektiv.

Dina projekt som riktar sig mot tidigare Visual Studio-versioner behöver en villkorlig kompileringssymbol. Den här symbolen kan sedan användas för att förgrena koden för att använda de olika API:erna. Du kan ange den villkorliga kompileringssymbolen på sidan projektegenskaper:

Skärmbild som visar rutan för att ange en villkorsstyrd kompileringssymbol.

Se till att ange kompileringssymbolen för Alla konfigurationer. Som standard kan symbolen som du anger endast gälla för en konfiguration.

C#-tekniker

Du kan använda kompileringssymbolen som ett förprocessordirektiv (#if), som du ser i följande kod. Du kan sedan förgrena koden för att hantera en ändring som bryter kompatibilitet mellan Visual Studio-versioner.

    Guid myGuid = new Guid("{633FBA02-719B-40E7-96BF-0899767CD104}");
    uint myFlags = 0;
    IVsShell shell = await AsyncServiceProvider.GlobalProvider.GetServiceAsync<SVsShell, IVsShell>();
#if Dev16
    shell.LoadUILibrary(myGuid, myFlags, out uint ptrLib);
#else
    shell.LoadUILibrary(myGuid, myFlags, out IntPtr ptrLib);
#endif

I vissa fall kan du använda var för att undvika att namnge typen och undvika behovet av #if regioner. Föregående kodfragment kan också skrivas som:

    Guid myGuid = new Guid("{633FBA02-719B-40E7-96BF-0899767CD104}");
    uint myFlags = 0;
    IVsShell shell = await AsyncServiceProvider.GlobalProvider.GetServiceAsync<SVsShell, IVsShell>();
    shell.LoadUILibrary(myGuid, myFlags, out var ptrLib);

När du använder syntaxen #if kan du se hur du kan använda listrutan för språktjänstkontext för att ändra syntaxmarkering. Den andra listrutan hjälper språktjänsten att fokusera på en Visual Studio-målversion för det här tillägget jämfört med en annan.

Skärmbild som visar villkorsstyrd kompilering i ett delat projekt.

XAML-delningstekniker

XAML har ingen förprocessor för att tillåta anpassning av innehåll baserat på preprocessorsymboler. Du kan behöva kopiera och underhålla två XAML-sidor vars innehåll skiljer sig mellan Visual Studio 2022 och tidigare versioner.

I vissa fall kan en referens till en typ som finns i distinkta sammansättningar i Visual Studio 2022 och tidigare versioner fortfarande representeras i en XAML-fil. Ta bort namnområdet som refererar till sammansättningen:

-xmlns:vsui="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.14.0"
-Value="{DynamicResource {x:Static vsui:TreeViewColors.SelectedItemActiveBrushKey}}"
+Value="{DynamicResource TreeViewColors.SelectedItemActiveBrushKey}"

Testa tillägget

Om du vill testa ett tillägg som riktar sig till Visual Studio 2022 måste du ha Visual Studio 2022 installerat. Du kommer inte att kunna köra 64-bitarstillägg på tidigare versioner av Visual Studio.

Du kan använda Visual Studio 2022 för att skapa och testa dina tillägg oavsett om de är avsedda för Visual Studio 2022 eller en tidigare version. När du öppnar ett VSIX-projekt från Visual Studio 2022 öppnas en experimentell instans av Visual Studio.

Vi rekommenderar starkt att du testar med varje version av Visual Studio som du vill att tillägget ska stödja.

Publicera ditt tillägg

Du har lagt till ett Visual Studio 2022-mål i tillägget och testat det. Nu är du redo att publicera tillägget så att världen kan beundra det.

Visual Studio Marketplace

Att publicera tillägget till Visual Studio Marketplace är ett bra sätt att få nya användare att hitta och installera tillägget. Oavsett om ditt tillägg endast riktar sig till Visual Studio 2022 eller riktar sig till äldre Visual Studio-versioner finns Marketplace där för att stödja dig.

I framtiden kan du på Marketplace ladda upp flera VSIX till bara en Marketplace-lista. Du kan sedan ladda upp en VSIX som är anpassad för Visual Studio 2022 och en VSIX för en tidigare version av Visual Studio. Användarna får automatiskt rätt VSIX för Visual Studio-versionen som de har installerat när de använder Visual Studio-tilläggshanteraren.

Anpassat installationsprogram

Om du skapar en MSI- eller EXE-fil för att installera tillägget och skapa vsixinstaller.exe för att installera (en del av) tillägget ska du veta att VSIX-installationsprogrammet i Visual Studio 2022 har uppdaterats. Utvecklare måste använda den version av VSIX-installationsprogrammet som medföljer Visual Studio 2022 för att installera tillägg till den versionen av Visual Studio.

VSIX-installationsprogrammet i Visual Studio 2022 installerar även tillämpliga tillägg som riktar sig mot tidigare versioner av Visual Studio som finns med Visual Studio 2022 på samma dator.

Nätverksdelning

Du kan dela ditt tillägg via ett LAN eller på något annat sätt. Om du riktar in dig på Visual Studio 2022 och tidigare versioner måste du dela dina flera VSIX individuellt. Ge dem filnamn (eller placera dem i unika mappar) som hjälper användarna att veta vilken VSIX som ska installeras baserat på vilken version av Visual Studio de har installerat.

Beroenden

Om ditt VSIX anger andra VSIX som beroenden via <dependency>-elementet måste varje refererad VSIX installeras i samma mål och produktarkitekturer som VSIX. Om en beroende VSIX inte stöder den riktade installationen av Visual Studio misslyckas VSIX.

Det är OK för den beroende VSIX att stödja fler mål och arkitekturer än dina, men inte mindre. Den här begränsningen innebär att distributionsmetoden för en VSIX med beroenden bör spegla den av sina beroenden.

Q & A

Q: Mitt tillägg kräver inga ändringar i samverkan eftersom det bara tillhandahåller data (till exempel mallar). Kan jag skapa ett enda tillägg som även innehåller Visual Studio 2022?

En: Ja! Mer information om detta finns i tillägg utan att köra kod.

Q: Ett NuGet-beroende skapar gamla samverkanssammansättningar och orsakar motstridiga klasser. Vad ska jag göra?

A: Lägg till följande rad i filen .csproj för att undvika duplicerade sammansättningar:

    <PackageReference Include="<Name of offending assembly>" ExcludeAssets="compile" PrivateAssets="all" />

Den här koden förhindrar att paketreferenser importerar den gamla versionen av sammansättningen från andra beroenden.

Q: Mina kommandon och snabbtangenter slutade fungera i Visual Studio när jag bytte källfiler till ett delat projekt. Vad ska jag göra?

A: Steg 2.4 i exemplet bildoptimerare visar hur du lägger till VSCT-filer som länkade objekt så att de kompileras till VSCT-filen.

Följ ett steg för steg-exempel ImageOptimizer, med länkar till projektet och kodändringar för varje steg.