Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 hostován v procesu podle tohoto návodu. 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 pracovním zatížením
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, jakmile se vaše rozšíření načte.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 používat injektáž závislostí v .NET.
Třídy MefInjection<TService>
a AsyncServiceProviderInjection<TService, TInterface>
(obě z oboru názvů Microsoft.VisualStudio.Extensibility.VSSdkCompatibility
) umožňují využívat služby sady Visual Studio SDK přidáním do konstruktoru třídy, která je instancována prostřednictvím vkládání závislostí (například příkazu, nástroje okna nebo části 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>
vlastnost "RequiresInProcessHosting"
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 okna nástrojů, posluchače editoru pomocí sady VisualStudio.Extensibility SDK v rámci stávajícího rozšíření VSSDK, musíte provést další kroky pro vytvoření instance rozšíření VisualStudio.Extensibility Extension ve vašem 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" PrivateAssets="all" />
<PackageReference Include="Microsoft.VisualStudio.Extensibility.Build" Version="17.9.2092" PrivateAssets="all" />
- Do souboru projektu přidejte vlastnost
VssdkCompatibleExtension
a nastavte ji natrue
. Tato vlastnost umožňuje 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.