Aktualizace rozšíření sady Visual Studio pro Visual Studio 2022

Důležité

Rady v tomto článku můžou vést vývojáře při migraci rozšíření, která vyžadují zásadní změny, aby fungovaly v sadě Visual Studio 2019 i v sadě Visual Studio 2022. V takových případech doporučujeme mít dva projekty VSIX a podmíněnou kompilaci.

Řada rozšíření bude fungovat v sadě Visual Studio 2019 i v sadě Visual Studio 2022 s drobnými změnami, které nebudou vyžadovat následující rady k modernizaci rozšíření v tomto článku. Vyzkoušejte své rozšíření v sadě Visual Studio 2022 a vyhodnoťte, jaká možnost je pro vaše rozšíření nejvhodnější.

Visual Studio 2022 je 64bitová aplikace a zavádí některé zásadní změny v sadě Visual Studio SDK. Tento článek vás provede kroky potřebnými k tomu, aby rozšíření fungovalo s aktuální verzí Preview sady Visual Studio 2022. Vaše rozšíření pak může být připravené pro uživatele, aby si nainstalovali dříve, než Visual Studio 2022 dosáhne obecné dostupnosti.

Instalace rozšíření sady Visual Studio a kompilace

Nainstalujte sadu Visual Studio 2022 ze stažených souborů sady Visual Studio 2022.

Rozšíření napsaná v jazyce .NET

Sada Visual Studio SDK, která cílí na Sadu Visual Studio 2022 pro spravovaná rozšíření, je výhradně na NuGetu:

  • Metabalíč Microsoft.VisualStudio.Sdk (verze 17.x) přináší většinu nebo všechna referenční sestavení, která budete potřebovat.
  • Balíček Microsoft.VSSDK.BuildTools (verze 17.x) by měl být odkazován z projektu VSIX, aby mohl sestavit visual Studio 2022 kompatibilní s VSIX.

I když neodkazujete na žádné zásadní změny, rozšíření se musí zkompilovat pomocí platformy Libovolný procesor nebo x64 . Platforma x86 není kompatibilní s 64bitovým procesem v sadě Visual Studio 2022.

Rozšíření napsaná v jazyce C++

Sada Visual Studio SDK pro rozšíření kompilovaná pomocí jazyka C++ je k dispozici s nainstalovanou sadou Visual Studio SDK jako obvykle.

I když neodkazujete na žádné zásadní změny, musí být rozšíření zkompilována speciálně pro Visual Studio 2022 SDK a pro AMD64.

Rozšíření se spuštěným kódem

Rozšíření se spuštěným kódem musí být zkompilována speciálně pro Visual Studio 2022. Visual Studio 2022 nenačte žádné rozšíření, které cílí na starší verzi sady Visual Studio.

Zjistěte, jak migrovat rozšíření pro starší verze sady Visual Studio do sady Visual Studio 2022:

  1. Modernizujte své projekty.
  2. Refaktorujte zdrojový kód do sdíleného projektu , abyste mohli cílit na Visual Studio 2022 a starší verze.
  3. Přidejte projekt VSIX cílený na Visual Studio 2022 a tabulku pro přemapování balíčků/sestavení.
  4. Proveďte potřebné úpravy kódu.
  5. Otestujte rozšíření sady Visual Studio 2022.
  6. Publikujte rozšíření sady Visual Studio 2022.

Rozšíření bez spuštění kódu

Rozšíření, která neobsahují žádný spuštěný kód (například šablony projektů nebo položek), nemusí postupovat podle předchozích kroků, včetně produkce dvou různých VSIX.

Místo toho upravte jeden VSIX tak, aby jeho source.extension.vsixmanifest soubor deklarovala dva cíle instalace:

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

Kroky v tomto článku o používání sdílených projektů a více VSIX můžete přeskočit. Můžete pokračovat v testování.

Poznámka:

Pokud vytvoříte nové rozšíření sady Visual Studio pomocí sady Visual Studio 2022 a chcete také cílit na Visual Studio 2019 nebo starší verzi, přečtěte si tuto příručku.

úlohy nástroje MSBuild

Pokud vytvoříte úlohy NÁSTROJE MSBuild, mějte na paměti, že v sadě Visual Studio 2022, je pravděpodobné, že budou načteny v 64bitovém procesu MSBuild.exe. Pokud vaše úloha vyžaduje spuštění 32bitového procesu, přečtěte si téma Konfigurace cílů a úkolů , abyste zajistili, že nástroj MSBuild načte úlohu v 32bitovém procesu.

Modernizace projektu VSIX

Před přidáním podpory sady Visual Studio 2022 do rozšíření důrazně doporučujeme vyčistit a modernizovat stávající projekt:

  1. Migrace z packages.config do PackageReference.

  2. Nahraďte všechny přímé odkazy na sestavení sady Visual Studio SDK položkami PackageReference :

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

    Tip

    Mnoho odkazů na sestavení můžete nahradit pouze jednouPackageReference instancí metabalíku:

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

    Nezapomeňte vybrat verze balíčků, které odpovídají minimální verzi sady Visual Studio, na kterou cílíte.

Některá sestavení, která nejsou jedinečná pro sadu Visual Studio SDK (například Newtonsoft.Json.dll), můžou být zjistitelná prostřednictvím jednoduchého <Reference Include="Newtonsoft.Json" /> odkazu před sadou Visual Studio 2022. V sadě Visual Studio 2022 ale vyžadují odkaz na balíček. Důvodem je, že některé adresáře modulu runtime sady Visual Studio a sady SDK byly odebrány z výchozí cesty hledání sestavení v nástroji MSBuild.

Při přechodu z přímých odkazů na sestavení na odkazy na balíčky NuGet můžete vyzvednout další odkazy na sestavení a balíčky analyzátoru, protože NuGet automaticky nainstaluje přechodné uzavření závislostí. To je obecně v pořádku, ale může to vést k dalším upozorněním během sestavení. Projděte si tato upozornění a vyřešte co nejvíce. Zvažte použití oblastí v kódu #pragma warning disable <id> k potlačení upozornění, která nemůžete vyřešit.

Použití sdílených projektů pro cílení na více verzí

Sdílené projekty jsou typ projektu, který byl zaveden v sadě Visual Studio 2015. Sdílené projekty v sadě Visual Studio umožňují sdílení souborů zdrojového kódu mezi více projekty a vytváření odlišně pomocí symbolů podmíněné kompilace a jedinečných sad odkazů.

Visual Studio 2022 vyžaduje samostatnou sadu referenčních sestavení ze všech předchozích verzí sady Visual Studio. Proto doporučujeme použít sdílené projekty k pohodlnému cílení rozšíření na Visual Studio 2022, starší verze a novější verze. Tato technika vám poskytne sdílení kódu, ale odlišné odkazy.

V kontextu rozšíření sady Visual Studio můžete mít jeden projekt VSIX pro Visual Studio 2022 a novější a jeden projekt VSIX pro Visual Studio 2019 a starší. Každý z těchto projektů by obsahoval pouze source.extension.vsixmanifest instanci a balíček odkazuje na sadu SDK 16.x nebo sadu SDK 17.x. Tyto projekty VSIX budou mít také sdílený odkaz na nový sdílený projekt, který bude hostovat veškerý zdrojový kód, který se dá sdílet ve dvou verzích sady Visual Studio.

V této části se předpokládá, že už máte projekt VSIX, který cílí na Visual Studio 2019 a že chcete, aby vaše rozšíření fungovalo v sadě Visual Studio 2022.

Všechny tyto kroky můžete provést pomocí sady Visual Studio 2019:

  1. Pokud jste to ještě neudělali, modernizovat projekty, aby se kroky později v tomto procesu aktualizace zjednodušily.

  2. Přidejte do svého řešení nový sdílený projekt pro každý existující projekt, který odkazuje na sadu Visual Studio SDK. Klikněte pravým tlačítkem myši na řešení a pak vyberte Přidat>nový projekt.

    Screenshot that shows the selections for adding a new project.

  3. V dialogovém okně Přidat nový projekt vyhledejte sdílený projekt a vyberte šablonu sdíleného projektu .

    Screenshot that shows searching for and selecting the Shared Project template.

  4. Přidejte odkaz z každého projektu odkazujícího na sadu Visual Studio SDK do svého sdíleného protějšek projektu.

    Screenshot that shows selections for adding a shared project reference.

  5. Přesuňte veškerý zdrojový kód (včetně souborů .cs a .resx ) z každého projektu odkazujícího na sadu Visual Studio SDK na jeho sdílený protějšek projektu. V projektu VSIX ponechte soubor source.extension.vsixmanifest.

    Screenshot that shows a shared project containing all source files.

  6. Přesuňte soubory metadat (například poznámky k verzi, licence a ikony) a soubory VSCT do sdíleného adresáře. Pak je přidejte jako propojené soubory do projektu VSIX. Všimněte si, že sdílený adresář je oddělený od sdíleného projektu.

    Screenshot that shows selections for adding metadata and V S C T files as linked files.

    • U souborů metadat nastavte akci sestavení na obsah. Nastavte možnost Zahrnout do VSIX na hodnotu True.

      Screenshot that shows including metadata files in V S I X.

    • U souborů VSCT nastavte akci sestavení na VSCTCompile. Nastavte možnost Zahrnout do VSIX na False.

      Screenshot that shows selected properties for a V S C T file.

      Pokud si Visual Studio stěžuje, že toto nastavení není podporované, můžete akci sestavení ručně změnit tak, že projekt vyložíte a změníte Content na 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. Sestavte projekt, abyste potvrdili, že jste nezavedli žádné chyby.

Váš projekt je teď připravený k přidání podpory sady Visual Studio 2022.

Přidání cíle sady Visual Studio 2022

V této části se předpokládá, že jste dokončili kroky k faktoru rozšíření sady Visual Studio se sdílenými projekty.

Přidejte do rozšíření podporu sady Visual Studio 2022 pomocí následujícího postupu. Můžete je dokončit pomocí sady Visual Studio 2019.

  1. Přidejte do svého řešení nový projekt VSIX. Tento projekt bude cílit na Visual Studio 2022. Odeberte veškerý zdrojový kód, který byl do šablony dodaný, ale ponechte soubor source.extension.vsixmanifest .

  2. V novém projektu VSIX přidejte odkaz na stejný sdílený projekt, na který odkazuje visual Studio 2019 zaměřené na VSIX.

    Screenshot that shows a solution with one shared project and two V S I X projects.

  3. Ověřte, že se nový projekt VSIX správně sestaví. Možná budete muset přidat odkazy tak, aby odpovídaly původnímu projektu VSIX, abyste vyřešili případné chyby kompilátoru.

  4. U spravovaných rozšíření sady Visual Studio aktualizujte odkazy na balíčky z verze 16.x (nebo starší) na verze balíčků 17.x v souboru projektu cíleném na Visual Studio 2022. Použijte Správce balíčků NuGet nebo přímo upravte soubor projektu:

    -<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" />
    

    Verze uvedené v předchozím kódu jsou určené jenom pro ukázku. V kódu použijte verze, které jsou k dispozici na webu NuGet.

    V mnoha případech se ID balíčků změnila. Seznam změn v sadě Visual Studio 2022 najdete v tabulce mapování balíčků a sestavení.

    Rozšíření napsaná v jazyce C++ zatím nemají k dispozici sadu SDK pro kompilaci.

  5. U projektů C++ musí být rozšíření zkompilována pro AMD64. U spravovaných rozšíření zvažte změnu projektu z vytváření libovolného procesoru na x64. Tato změna zajišťuje, že v sadě Visual Studio 2022 se vaše rozšíření vždy načte v 64bitovém procesu. Jakýkoli procesor je také v pořádku, ale pokud odkazujete na jakékoli nativní binární soubory x64, může se zobrazit upozornění.

    Jakákoli závislost, kterou vaše rozšíření může mít v nativním modulu, bude nutné aktualizovat z image x86 na image AMD64.

  6. Upravte soubor source.extension.vsixmanifest tak, aby odrážel cílení na Visual Studio 2022. <InstallationTarget> Nastavte značku tak, aby označí sadu Visual Studio 2022. ProductArchitecture Nastavte prvek na označení datové části AMD64.

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

    Důležité

    V sadě Visual Studio 2019 návrhář pro tento soubor nezpřístupňuje nový ProductArchitecture prvek. K provedení této změny musíte použít editor XML. Pokud chcete získat přístup k editoru XML, přejděte na Průzkumník řešení a vyberte příkaz Otevřít v aplikaci.

    Prvek ProductArchitecture je kritický. Visual Studio 2022 bez něj nenainstaluje vaše rozšíření.

    Element (Prvek) Hodnota Popis
    ProductArchitecture x86, amd64 Platformy, které tento VSIX podporuje. Nerozlišuje se malá a velká písmena. Použijte jednu platformu na prvek a jeden prvek na InstallationTarget instanci. Pro verze produktu menší než 17.0 je x86 výchozí hodnota a je možné ji vynechat. Pro produkty verze 17.0 a novější je tento prvek povinný a neexistuje žádná výchozí hodnota. V sadě Visual Studio 2022 je jediným platným obsahem tohoto prvku amd64.
  7. Proveďte všechny další potřebné úpravy ve source.extension.vsixmanifest tak, aby odpovídaly tomu, který cílí na Visual Studio 2019 (pokud existuje).

    Pokud publikujete dvě verze rozšíření, které každý cílí na jinou verzi sady Visual Studio, ujistěte se, že ID VSIX v Identity elementu manifestu se pro každé rozšíření liší.

V tuto chvíli máte visual Studio 2022 cílené rozšíření VSIX. Měli byste sestavit projekt VSIX cílený na Visual Studio 2022 a projít všechny konce sestavení, které se zobrazí. Pokud nemáte v projektu VSIX cílený na Visual Studio 2022 konce sestavení, blahopřejeme! Jste připraveni na testování.

Zpracování zásadních změn rozhraní API

Zásadní změny rozhraní API můžou vyžadovat aktualizace kódu, který běžel ve starších verzích sady Visual Studio. Tipy, jak aktualizovat kód, najdete v tématu Zásadní změny rozhraní API v sadě Visual Studio 2022.

Při přizpůsobování kódu doporučujeme použít podmíněnou kompilaci. Váš kód pak může i nadále podporovat starší verze sady Visual Studio a současně přidávat podporu pro Visual Studio 2022.

Když získáte sestavení rozšíření cílené na Visual Studio 2022, pokračujte testováním.

Použití symbolů podmíněné kompilace

Pokud chcete použít stejný zdrojový kód, dokonce i stejný soubor pro Visual Studio 2022 a starší verze, možná budete muset použít podmíněnou kompilaci. Pak můžete vytvořit fork kódu, abyste se přizpůsobili zásadním změnám. Podmíněná kompilace je funkcí jazyků C#, Visual Basic a C++. Dá se použít ke sdílení většiny kódu, zatímco na konkrétních místech umožňuje využívat divergentní rozhraní API.

Další informace o použití direktiv preprocesoru a symbolů podmíněné kompilace naleznete v tématu Direktivy preprocesoru jazyka C#.

Vaše projekty, které cílí na starší verze sady Visual Studio, budou potřebovat symbol podmíněné kompilace. Tento symbol se pak dá použít k rozvětvování kódu pro použití různých rozhraní API. Symbol podmíněné kompilace můžete nastavit na stránce vlastností projektu:

Screenshot that shows the box for entering a conditional compilation symbol.

Nezapomeňte nastavit symbol kompilace pro všechny konfigurace. Ve výchozím nastavení se symbol, který zadáte, může vztahovat pouze na jednu konfiguraci.

Techniky jazyka C#

Symbol kompilace můžete použít jako direktivu preprocesoru (#if), jak je znázorněno v následujícím kódu. Pak můžete fork kódu vyřešit zásadní změnu mezi verzemi sady Visual Studio.

    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

V některých případech se můžete vyhnout var pojmenování typu a vyhnout se potřebě #if oblastí. Předchozí fragment kódu lze také napsat takto:

    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);

Při použití #if syntaxe si všimněte, jak můžete pomocí rozevíracího seznamu kontextu služby jazyka změnit zvýraznění syntaxe. Druhý rozevírací seznam pomáhá službě jazyků zaměřit pozornost na jednu cílovou verzi sady Visual Studio pro toto rozšíření a jinou.

Screenshot that shows conditional compilation in a shared project.

Techniky sdílení XAML

XAML nemá žádný preprocesor umožňující přizpůsobení obsahu na základě symbolů preprocesoru. Možná budete muset kopírovat a udržovat dvě stránky XAML, jejichž obsah se liší mezi sadou Visual Studio 2022 a staršími verzemi.

V některých případech může být odkaz na typ, který existuje v odlišných sestaveních v sadě Visual Studio 2022 a starších verzích, stále reprezentovatelný v jednom souboru XAML. Odeberte obor názvů, který odkazuje na sestavení:

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

Otestování rozšíření

Pokud chcete otestovat rozšíření, které cílí na Visual Studio 2022, musíte mít nainstalovanou sadu Visual Studio 2022. Ve starších verzích sady Visual Studio nebudete moct spouštět 64bitová rozšíření.

Visual Studio 2022 můžete použít k sestavení a otestování rozšíření bez ohledu na to, jestli cílí na Visual Studio 2022 nebo starší verzi. Když otevřete projekt VSIX ze sady Visual Studio 2022, otevře se experimentální instance sady Visual Studio.

Důrazně doporučujeme testovat s každou verzí sady Visual Studio, kterou má rozšíření podporovat.

Publikování rozšíření

Do rozšíření jste přidali cíl sady Visual Studio 2022 a otestovali ho. Teď jste připraveni publikovat rozšíření pro svět, který bude obdivovat.

Visual Studio Marketplace

Publikování rozšíření na Visual Studio Marketplace je skvělý způsob, jak novým uživatelům najít a nainstalovat rozšíření. Ať už vaše rozšíření cílí výhradně na Visual Studio 2022 nebo cílí na starší verze sady Visual Studio, marketplace vás podporuje.

V budoucnu vám Marketplace umožní nahrát více VSIX na jenom jeden výpis z Marketplace. Potom můžete nahrát sadu Visual Studio 2022 cílenou na VSIX a VSIX pro starší verzi sady Visual Studio. Uživatelé automaticky získají správnou verzi VSIX pro visual Studio, kterou nainstalovali, když používají správce rozšíření sady Visual Studio.

Vlastní instalační program

Pokud sestavíte soubor MSI nebo EXE pro instalaci rozšíření a vytvoří vsixinstaller.exe se pro instalaci (součást) rozšíření, víte, že instalační program VSIX v sadě Visual Studio 2022 byl aktualizován. Vývojáři musí použít verzi instalačního programu VSIX, která je součástí sady Visual Studio 2022 k instalaci rozšíření této verze sady Visual Studio.

Instalační program VSIX v sadě Visual Studio 2022 nainstaluje také příslušná rozšíření, která cílí na předchozí verze sady Visual Studio, které existují se sadou Visual Studio 2022 na stejném počítači.

Sdílená síťová složka

Rozšíření můžete sdílet přes síť LAN nebo jiným způsobem. Pokud cílíte na Visual Studio 2022 a starší verze, musíte sdílet více VSIX jednotlivě. Dejte jim názvy souborů (nebo je umístěte do jedinečných složek), které uživatelům pomůžou zjistit, který VSIX se má nainstalovat na základě nainstalované verze sady Visual Studio.

Závislosti

Pokud váš VSIX určuje další VSIX jako závislosti prostřednictvím elementu <dependency> , musí být každý odkazovaný VSIX nainstalován ve stejných cílech a architekturách produktů jako váš VSIX. Pokud závislý VSIX nepodporuje cílovou instalaci sady Visual Studio, vaše sada VSIX selže.

Je v pořádku, aby závislý VSIX podporoval více cílů a architektur než vy, jen ne méně. Toto omezení znamená, že přístup k nasazení a distribuci VSIX se závislostmi by měl zrcadlit závislostí závislých.

Otázky a odpovědi

Otázka: Moje rozšíření nevyžaduje žádné změny interoperability, protože poskytuje jenom data (například šablony). Můžu vytvořit jedno rozšíření, které obsahuje také Visual Studio 2022?

Ano! Informace o tom najdete v tématu Rozšíření bez spuštění kódu .

Otázka: Závislost NuGet přináší stará sestavení interoperability a způsobuje kolidující třídy. Co mám dělat?

A: Do souboru .csproj přidejte následující řádek, abyste se vyhnuli duplicitním sestavením:

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

Tento kód zabrání importu odkazů na balíčky ze starší verze sestavení z jiných závislostí.

Otázka: Moje příkazy a klávesové zkratky přestaly fungovat v sadě Visual Studio po přepnutí zdrojových souborů do sdíleného projektu. Co mám dělat?

A: Krok 2.4 ukázky Optimalizátoru obrázků ukazuje, jak přidat soubory VSCT jako propojené položky, aby se zkompilovaly do souboru VSCT.

Postupujte podle podrobného příkladu ImageOptimizer s odkazy na projekt a změny kódu pro každý krok.