Společné použití sady VisualStudio.Extensibility SDK a sady VSSDK
I když byl model VisualStudio.Extensibility vytvořen především pro hostování rozšíření mimo proces devenv.exe, je možné použít rozhraní API sady VisualStudio.Extensibility SDK v rozšíření spuštěném v procesu sady Visual Studio a využívat tradiční rozhraní API rozšiřitelnosti poskytovaná balíčky Microsoft.VisualStudio.Sdk.
Podpora použití v rámci je určena k tomu, aby umožnila prvním uživatelům nové API VisualStudio.Extensibility a zároveň spoléhat na Microsoft.VisualStudio.Sdk k pokrytí jakýchkoli nedostatků funkcí.
Tento dokument poskytuje rychlý přehled různých možností, jak využít VisualStudio.Extensibility SDK v rámci procesu.
Pokud vyvíjíte nové rozšíření, doporučujeme vytvořit VisualStudio.Extension, který je hostovaný v průběhu následujícího tomto kurzu. Tato metoda vám umožňuje využít plné možnosti sady VisualStudio.Extensibility SDK a navíc vkládat služby VSSDK a MEF.
Pokud máte existující rozšíření VSSDK, můžete podle těchto tipů použít novou instanci VisualStudioExtensibility ve vašem rozšíření.
Pokud chcete do existujícího rozšíření VSSDK pomocí sady VisualStudio.Extensibility SDK přidat příkazy, ladicí vizualizéry a okna nástrojů, můžete se podívat na tyto tipy pro hostování jak rozšíření VSSDK, tak rozšíření VisualStudio.Extensibility ve stejném projektu rozšíření VS.
Vytvoření vašeho prvního rozšíření VisualStudio.Extensibility kompatibilního s VSSDK
Zatímco byl model VisualStudio.Extensibility vytvořen především pro hostování rozšíření mimo proces devenv.exe, počínaje sadou Visual Studio 2022 17.4 Preview 1 je možné vytvořit rozšíření VisualStudio.Extensibility hostované v rámci devenv.exe a může používat tradiční rozhraní API rozšiřitelnosti poskytovaná balíčky Microsoft.VisualStudio.Sdk.
Požadavky
- Visual Studio 2022 verze 17.9 Preview 1 nebo vyšší s úlohou
Visual Studio extension development
- Pokud aktualizujete ze starších buildů, nezapomeňte odinstalovat projektový systém VisualStudio.Extensibility, abyste se vyhnuli možným konfliktům.
Vytvoření projektu rozšíření
- K vytvoření nového řešení použijte šablonu s rozšířením VisualStudio.Extensibility, která je kompatibilní se sadou VSSDK.
Odlaďte své rozšíření
Stisknutím
F5
spusťte ladění, tím se vaše rozšíření sestaví a nasadí ho do experimentální instance verze sady Visual Studio, kterou používáte. Ladicí program by se měl připojit po načtení rozšíření.Příkaz najdete v nabídce
Extensions
, jak je znázorněno na následujícím obrázku:
Využívání služeb sady Visual Studio SDK z rozšíření VisualStudio.Extensibility
Projekt rozšíření kompatibilní se sadou VS-SDK odkazuje na balíček Microsoft.VisualStudio.Sdk, který umožňuje přístup ke všem službám sady Visual Studio SDK.
Tradičně se tyto služby využívají prostřednictvím MEF nebo AsyncServiceProvider. Rozšíření VisualStudio.Extensibility se místo toho doporučuje injektáž závislostí rozhraní .NET.
Třídy MefInjection<TService>
a AsyncServiceProviderInjection<TService, TInterface>
(oba z oboru názvů Microsoft.VisualStudio.Extensibility.VSSdkCompatibility
) umožňují využívat služby sady Visual Studio SDK tím, že je přidáte do konstruktoru třídy, která je instanciována pomocí injektáže závislostí, jako je příkaz, okno nástroje nebo část rozšíření.
Následující příklad ukazuje, jak lze do příkazu přidat služby DTE2
a IBufferTagAggregatorFactoryService
.
[VisualStudioContribution]
public class Command1 : Command
{
private TraceSource traceSource;
private AsyncServiceProviderInjection<DTE, DTE2> dte;
private MefInjection<IBufferTagAggregatorFactoryService> bufferTagAggregatorFactoryService;
public Command1(
VisualStudioExtensibility extensibility,
TraceSource traceSource,
AsyncServiceProviderInjection<DTE, DTE2> dte,
MefInjection<IBufferTagAggregatorFactoryService> bufferTagAggregatorFactoryService)
: base(extensibility)
{
this.dte = dte;
this.bufferTagAggregatorFactoryService = bufferTagAggregatorFactoryService;
}
public override CommandConfiguration CommandConfiguration => new("Sample Remote Command")
{
Placements = new[] { CommandPlacement.KnownPlacements.ExtensionsMenu },
Icon = new(ImageMoniker.KnownValues.Extension, IconSettings.IconAndText),
};
Anatomie rozšíření kompatibilního s VSSDK pro VisualStudio.Extensibility
Při použití rozšíření VisualStudio.Extensibility s kompatibilitou sady VSSDK se šablona postará o nastavení celého projektu, je užitečné vědět, jaké jsou základní součásti rozšíření VisualStudio.Extensibility kompatibilní se sadou VS-SDK a jak se liší od běžné varianty popsané v průvodci "vytvoření prvního rozšíření".
TargetFramework a VssdkCompatibleExtension
Projekt rozšíření musí cílit na verzi .NET používanou cílovou verzí sady Visual Studio. Visual Studio 2022 musí cílit na .NET Framework 4.7.2.
Projekt rozšíření musí obsahovat také vlastnost VssdkCompatibleExtension
nastavenou na true
.
<PropertyGroup>
<VssdkCompatibleExtension>true</VssdkCompatibleExtension>
</PropertyGroup>
RequiresInProcessHosting – vlastnost
Třída Extension
musí být nakonfigurována s vlastností RequiresInProcessHosting = true
, která identifikuje rozšíření jako v procesu.
[VisualStudioContribution]
internal class MyExtension : Extension
{
public override ExtensionConfiguration? ExtensionConfiguration => new()
{
RequiresInProcessHosting = true,
};
...
Manifest balíčku
Projekt rozšíření musí obsahovat manifest balíčku s názvem source.extension.vsixmanifest
. Značka Installation
musí mít ExtensionType
nastavenou na VSSDK+VisualStudio.Extensibility
.
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="MyExtensionId.f14b8c45-154f-4584-abd7-9ec22af003e2" Version="1.0" Language="en-US" Publisher="Microsoft" />
<DisplayName>My extension</DisplayName>
<Description xml:space="preserve">My extension's description.</Description>
</Metadata>
<Installation ExtensionType="VSSDK+VisualStudio.Extensibility">
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.9,18.0)">
<ProductArchitecture>amd64</ProductArchitecture>
</InstallationTarget>
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.9,18.0)">
<ProductArchitecture>arm64</ProductArchitecture>
</InstallationTarget>
</Installation>
<Prerequisites>
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[17.0,)" DisplayName="Visual Studio core editor" />
</Prerequisites>
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
</Assets>
</PackageManifest>
Použijte VisualStudio.Extensibility z existujících rozšíření VSSDK
U existujících rozšíření VSSDK je další možností dotazování na instanci VisualStudioExtensibility prostřednictvím poskytovatele služeb a využití jejích metod. Tato metoda umožňuje použít novou plochu rozhraní API sady VisualStudio.Extensibility SDK ve stávajících komponentách. Tato možnost může být užitečná v situacích, kdy chcete pomocí nového rozhraní API dotazovat informace o projektu, správu dokumentů bez vytvoření nového rozšíření založeného na visualStudio.Extensibility.
Tady je příklad fragmentu kódu, který ukazuje, jak se dá využít VisualStudioExtensibility
v rámci balíčku VSSDK:
- Do souboru
.csproj
zahrňte odkaz na balíček visualStudio.Extensibility API:
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Extensibility" Version="17.9.2092" />
</ItemGroup>
- Teď můžete dotazovat instanci VisualStudioExtensibility pomocí metody
GetServiceAsync
ve svém balíčku nebo v ostatních komponentách.
...
using Microsoft.VisualStudio.Extensibility;
...
public class VSSDKPackage : AsyncPackage
{
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
VisualStudioExtensibility extensibility = await this.GetServiceAsync<VisualStudioExtensibility, VisualStudioExtensibility>();
await extensibility.Shell().ShowPromptAsync("Hello from in-proc", PromptOptions.OK, cancellationToken);
...
}
}
Přidání rozšíření VisualStudio.Extensibility do existujícího projektu rozšíření VSSDK
Pokud chcete také přispívat komponentami, jako jsou nástrojová okna a naslouchací moduly editoru, pomocí sady VisualStudio.Extensibility SDK ve stávajícím rozšíření VSSDK, budete muset postupovat podle dalších kroků k vytvoření instance VisualStudio.Extensibility Extension ve svém projektu.
K využití balíčků VisualStudio.Extensibility SDK potřebujete styl sady SDK
.csproj
. U existujících projektů možná budete muset aktualizovat.csproj
na styl sady SDK.Místo odkazu na balíček pro
Microsoft.VSSDK.BuildTools
přidejte odkazy na balíčky VisualStudio.Extensibility.
<PackageReference Include="Microsoft.VisualStudio.Extensibility.Sdk" Version="17.9.2092" />
<PackageReference Include="Microsoft.VisualStudio.Extensibility.Build" Version="17.9.2092" />
- Do souboru projektu přidejte vlastnost
VssdkCompatibleExtension
a nastavte ji natrue
. Tato vlastnost umožní kompatibilitu některých funkcí sady VSSDK.
<PropertyGroup>
<VssdkCompatibleExtension>true</VssdkCompatibleExtension>
</PropertyGroup>
- Vytvořte novou třídu rozšíření dědící z
Extension
základní třídy a nastavte RequiresInProcessHosting vlastnost, jak je znázorněno výše. - Upravte soubor
source.extension.vsixmanifest
přidánímExtensionType="VSSDK+VisualStudio.Extensibility"
do značkyInstallation
.
<Installation ExtensionType="VSSDK+VisualStudio.Extensibility">
Teď můžete použít všechny funkce sady VisualStudio.Extensibility společně s existujícím rozšířením VSSDK.