Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit document is een quickstart die laat zien hoe u uw eerste extensie maakt met visualStudio.Extensibility. De extensie wordt buiten het proces uitgevoerd, wat betekent dat deze buiten het Visual Studio-proces wordt uitgevoerd.
Prerequisites
- Visual Studio 2026 versie 18.11 of hoger met de workload ontwikkeling van Visual Studio-extensies wordt aanbevolen. Voor eerdere versies vereist VisualStudio.Extensibility Visual Studio 2022 versie 17.9 of hoger.
Het extensieproject maken
Visual Studio 18.11 of hoger (aanbevolen)
Gebruik de sjabloon Modern VSIX Project en selecteer VisualStudio.Extensibility (Out-Of-Process) onder Extensietype. De sjabloon is standaard ingesteld op VSSDK, dus selecteer de optie voor buitenproces voor deze quickstart.
Volg Een extensie maken met de sjabloon Modern VSIX Project voor de stappen van de wizard en project SDK-opties.
Eerdere Visual Studio versies
Gebruik de sjabloon VisualStudio.Extensibility Project om een nieuwe uitbreidbaarheid project te maken.
Op dit moment kunt u beginnen met het uitbreiden van Visual Studio door opdrachten en editoronderdelen toe te voegen aan uw extensie.
De uitbreidingsklasse
Met de sjabloon maakt u een klasse die overerft van Extension ↗. Deze klasse is de eerste die wordt geïnstantieerd wanneer uw extensie wordt geladen. In de InitializeServices ↗ methode kunt u uw eigen services toevoegen aan de serviceverzameling om ze beschikbaar te maken voor afhankelijkheidsinjectie.
[VisualStudioContribution]
internal class ExtensionEntrypoint : Extension
{
public override ExtensionConfiguration ExtensionConfiguration => new()
{
Metadata = new(
id: "MyExtension.abc123",
version: this.ExtensionAssemblyVersion,
publisherName: "My Company",
displayName: "My Extension"),
};
protected override void InitializeServices(IServiceCollection serviceCollection)
{
base.InitializeServices(serviceCollection);
// You can configure dependency injection here by adding services to the serviceCollection.
}
}
U kunt ook het kenmerk ExportAttributeVisualStudioContribution ↗ zien dat wordt gebruikt om extensieonderdelen te markeren die zijn bedoeld voor gebruik door Visual Studio. Dit kenmerk kan worden toegepast op klassen die IVisualStudioContributionClass ↗ implementeren of op statische eigenschappen van een type dat IVisualStudioContributionProperty ↗ implementeert.
Uw eerste opdracht toevoegen
De sjabloon maakt Command1.cs aan als uw eerste opdrachtverwerker, die u als uitgangspunt kunt gebruiken. Omdat we Visual Studio op de hoogte willen stellen van deze opdracht, en omdat de Command ↗ klasse IVisualStudioContributionClass ↗ implementeert, wordt de opdracht gemarkeerd met het VisualStudioContribution kenmerk.
[VisualStudioContribution]
internal class Command1 : Command
{
De opdracht heeft een configuratie-eigenschap met de naam CommandConfiguration ↗, die de weergavenaam, het pictogram en de plaatsing onder het Extensions menu definieert.
public override CommandConfiguration CommandConfiguration => new("%MyExtension.Command1.DisplayName%")
{
// Use this object initializer to set optional parameters for the command. The required parameter,
// displayName, is set above. DisplayName is localized and references an entry in .vsextension\string-resources.json.
Icon = new(ImageMoniker.KnownValues.Extension, IconSettings.IconAndText),
Placements = new[] { CommandPlacement.KnownPlacements.ExtensionsMenu },
};
Configuratie-eigenschappen worden geëvalueerd door de C#-compiler bij het bouwen van de extensie en de bijbehorende waarden worden opgeslagen als extensiemetagegevens, zodat Visual Studio deze kunnen lezen zonder de extensieassembly te laden. Daarom hebben configuratie-eigenschappen aanvullende beperkingen vergeleken met normale eigenschappen (ze moeten bijvoorbeeld alleen-lezen zijn).
U kunt zien dat de weergavenaam van de opdracht is "%MyExtension.Command1.DisplayName%", die verwijst naar de MyExtension.Command1.DisplayName tekenreeks in het .vsextension/string-resources.json bestand, zodat deze tekenreeks kan worden gelokaliseerd.
Wanneer de opdracht wordt uitgevoerd, roept Visual Studio de ExecuteCommandAsync ↗ methode aan waar u een onderbrekingspunt kunt plaatsen. U kunt het context argument gebruiken of met this.Extensibility communiceren met Visual Studio.
Een opdrachthandler kan bijvoorbeeld als volgt zijn:
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
await this.Extensibility.Shell().ShowPromptAsync(
"Hello from an extension!",
PromptOptions.OK,
cancellationToken);
}
Raadpleeg de sectie Opdrachten voor meer informatie over het toevoegen van opdrachten .
Fouten opsporen in uw extensie
Zorg ervoor dat uw extensieproject is geselecteerd als opstartproject in Visual Studio en druk op
F5om de foutopsporing te starten.Als u op
F5drukt, wordt uw extensie gebouwd en gedeployd naar het experimentele exemplaar van de versie van Visual Studio die u gebruikt. De debugger zou verbinding moeten maken zodra je extensie is geladen.U vindt de nieuwe opdracht in
Extensionshet menu, zoals wordt weergegeven in de volgende afbeelding:
Volgende stappen
- Een commando toevoegen — de meest voorkomende eerste functie om te bouwen
- Gereedschapsvensters — aangepaste UI-panelen toevoegen
- Anatomie van een extensie - inzicht in de projectstructuur en de belangrijkste concepten
- Blader door alle voorbeelden ↗ — volledige werkende extensies op GitHub