Sdílet prostřednictvím


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 Visual Studio 2022 z Visual Studio 2022 downloadů.

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:

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

I když nezmiňujete žádné zásadní změny, rozšíření se musí zkompilovat pomocí platformy Any CPU nebo platformou 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, rozšíření se musí zkompilovat přímo pomocí sady 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í kompilovat 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. Zrefaktorujte váš zdrojový kód do sdíleného projektu, aby bylo možné zaměřit se na Visual Studio 2022 a starší verze.
  3. přidání projektu VSIX cíleného na Visual Studio 2022 a přemapování tabulkybalíčku nebo sestavení .
  4. Proveďte nezbytné úpravy kódu.
  5. Otestování rozšíření sady Visual Studio 2022.
  6. Publikování 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), nejsou nutné postupovat podle předchozích kroků, včetně produkce dvou různých VSIX.

Místo toho upravte jeden soubor 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 pomocí sady Visual Studio 2022 vytvoříte nové rozšíření sady Visual Studio a chcete také cílit na Visual Studio 2019 nebo starší verzi, přečtěte si této příručce.

Úlohy nástroje MSBuild

Pokud vytvoříte úlohy MSBuild, mějte na paměti, že ve 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í v 32bitovém procesu, podívejte se na téma Konfigurace cílů a úkolů, abyste zajistili, že nástroj MSBuild načte vaši úlohu ve 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. Migrovat z packages.config na 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="..." />
    

    Spropitné

    mnoho odkazů na sestavení můžete nahradit instancí pouze jednouPackageReference pro metabalík:

    -<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), mohla být zjistitelná prostřednictvím jednoduchého <Reference Include="Newtonsoft.Json" /> odkazu před verzí Visual Studio 2022. Ve Visual Studio 2022 však místo toho vyžadují odkaz na balíček. Důvodem je, že některé adresáře runtime komponent Visual Studio a SDK byly odebrány z výchozí cesty vyhledává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í. Obecně je to 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 jich co nejvíce, kolik můžete. Zvažte použití #pragma warning disable <id> oblastí v kódu k potlačení upozornění, která nemůžete vyřešit.

Použití sdílených projektů pro vícenásobné cílení

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 usnadnit kroky později v tomto procesu aktualizace.

  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 na řešení a vyberte Přidat>Nový projekt.

    snímek obrazovky znázorňující výběry pro přidání nového projektu

  3. V dialogovém okně Přidat nový projekt vyhledejte sdílený projekta poté vyberte šablonu Sdílený projekt.

    snímek obrazovky, který zobrazuje hledání a výběr šablony sdíleného projektu

  4. Přidejte odkaz z každého projektu odkazujícího na Visual Studio SDK na jeho odpovídající sdílený projekt.

    Snímek obrazovky znázorňující výběry pro přidání sdíleného odkazu na projekt

  5. Přesuňte veškerý zdrojový kód (včetně .cs a souborů .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.

    Snímek obrazovky zobrazící sdílený projekt obsahující všechny zdrojové soubory

  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.

    Snímek obrazovky znázorňující výběry pro přidání metadat a souborů V S C T jako propojených souborů

    • U souborů metadat nastavte Akce sestavení na Content. Nastavte Zahrnout do VSIX na True.

      snímek obrazovky, který ukazuje zahrnutí souborů metadat ve V S I X.

    • U souborů VSCT nastavte akce sestavení na VSCTCompile. Nastavte zahrnutí v VSIX na false.

      Snímek obrazovky znázorňující vybrané vlastnosti souboru V S C T

      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řidejte cíl sady Visual Studio 2022

V této části se předpokládá, že jste dokončili kroky pro 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 s šablonou dodaný, ale ponechte source.extension.vsixmanifest soubor.

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

    snímek obrazovky znázorňující řešení s jedním sdíleným projektem a dvěma projekty V S I X

  3. Ověřte, zda se nový projekt VSIX správně sestavuje. 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 z 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ů/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ýchrozšířeních ch Tato změna zajišťuje, že v sadě Visual Studio 2022 se vaše rozšíření vždy spustí v 64bitovém procesu. Jakýkoli procesoru je také v pořádku, ale pokud odkazujete na jakékoli nativní binární soubory jen pro 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. Nastavte značku <InstallationTarget> pro označení Visual Studio 2022. Nastavte prvek ProductArchitecture tak, aby označil datovou část 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ý prvek ProductArchitecture. K provedení této změny musíte použít editor XML. Pokud chcete získat přístup k editoru XML, přejděte do Průzkumníka projektů a vyberte příkaz Otevřít v.

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

    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 instanci InstallationTarget. Pro verze produktu menší než 17.0 je výchozí hodnota x86 a je možné ji vynechat. Pro produkty verze 17.0 a novější je tento prvek povinný a neexistuje žádná výchozí hodnota. Pro Visual Studio 2022, jediný platný obsah pro tento prvek je amd64.
  7. Proveďte jakékoli další úpravy potřebné v 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 prvku manifestu se pro každé rozšíření liší.

V tuto chvíli máte rozšíření VSIX cílené pro Visual Studio 2022. Měli byste sestavit VSIX projekt zaměřený na Visual Studio 2022 a vyřešit jakékoli chyby kompilace, které se zobrazí. Pokud nemáte chyby při sestavování ve vašem projektu VSIX zaměřeném na Visual Studio 2022, gratulujeme! 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.

Až začnete vytvářet rozšíření pro 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:

Snímek obrazovky zobrazující pole pro zadání symbolu podmíněné kompilace

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. Poté můžete rozdělit svůj kód, abyste se vypořádali s zásadní změnou 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 můžete použít var, abyste se vyhnuli pojmenování typu a vyhnuli se nutnosti #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);

Když používáte syntaxi #if, všimněte si, jak můžete pomocí rozevíracího seznamu pro kontext 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.

snímek obrazovky znázorňující podmíněnou kompilaci ve sdíleném projektu

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ý se odkazuje na toto 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í, aby ho svět mohl 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 souborů do pouze jednoho záznamu v Marketplace. Poté můžete nahrát VSIX zaměřený na Visual Studio 2022 a také 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 svého rozšíření a použijete vsixinstaller.exe k instalaci části svého rozšíření, vězte, ž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ý zmíněný VSIX nainstalován ve stejných cílových systémech 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 odrážet přístup jeho závislých komponent.

Q & A

Q: 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?

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

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

: Přidejte do souboru .csproj 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í.

Q: 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?

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