Uw eerste Visual Studio-extensie maken

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 2022 versie 17.9 Preview 1 of hoger met Visual Studio extension development workload.

Het extensieproject maken

  • Gebruik VisualStudio.Extensibility Project-sjabloon om een nieuwe uitbreidbaarheids-project te maken.

Schermopname van de VSExtensibility-sjabloon.

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 zich uitbreidt 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
{
    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 VisualStudioContribution zien dat wordt gebruikt om extensieonderdelen te markeren die door Visual Studio moeten worden gebruikt. 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 de klasse Command implementeert IVisualStudioContributionClass, wordt de opdracht gemarkeerd met het kenmerk VisualStudioContribution.

[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 methode ExecuteCommandAsync aan, waar u een breekpunt kunt plaatsen. U kunt context argument of this.Extensibility-object gebruiken om te communiceren met Visual Studio.

Een opdrachthandler kan bijvoorbeeld als volgt zijn:

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    await context.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

  1. Zorg ervoor dat uw extensieproject is geselecteerd als opstartproject in Visual Studio en druk op F5 om de foutopsporing te starten.

  2. Als u op F5 drukt, wordt uw extensie gebouwd en geïmplementeerd in het experimentele exemplaar van Visual Studio versie die u gebruikt. De debugger zou verbinding moeten maken zodra je extensie is geladen.

  3. U vindt de nieuwe opdracht in Extensions het menu, zoals wordt weergegeven in de volgende afbeelding:

    Schermafbeelding met voorbeeldopdracht in Visual Studio.

    Schermopname van de voorbeeldopdracht.

Volgende stappen 

Als u de inleidende overzichten hebt gemist, zie Welkom bij de documentatie van VisualStudio.Extensibility.

Maak nu een iets interessantere extensie; zie Een eenvoudige extensie maken.