Skapa ditt första Visual Studio-tillägg

Det här dokumentet är en snabbstart som visar hur du skapar ditt första tillägg med VisualStudio.Extensibility. Tillägget körs i en separat process, det vill säga utanför Visual Studio-processen.

Prerequisites

  • Visual Studio 2026 version 18.11 eller senare med arbetsbelastningen Visual Studio-tilläggsutveckling rekommenderas. För tidigare versioner kräver VisualStudio.Extensibility Visual Studio 2022 version 17.9 eller senare.

Skapa tilläggsprojektet

Använd mallen Modern VSIX Project och välj VisualStudio.Extensibility (Out-Of-Process) under Tilläggstyp. Mallen är som standard VSSDK, så välj alternativet out-of-process för den här snabbstarten.

Följ Skapa ett tillägg med mallen Modern VSIX Project för stegen i guiden och project SDK-alternativ.

Tidigare Visual Studio versioner

Använd mallen VisualStudio.Extensibility Project för att skapa ett nytt utökningsprojekt.

Skärmbild av VSExtensibility-mallen.

Nu är du redo att börja utöka Visual Studio genom att lägga till kommandon och redigerarkomponenter i tillägget.

Tilläggsklassen

Mallen skapar en klass som ärver från Extension ↗. Den här klassen är den första som instansieras när tillägget läses in. InitializeServices ↗ I metoden kan du lägga till dina egna tjänster i tjänstsamlingen för att göra dem tillgängliga för beroendeinjektion.

[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.
    }
}

Du kan också se attributet VisualStudioContribution ↗ som används för att markera tilläggskomponenter som är avsedda att användas av Visual Studio. Det här attributet kan tillämpas på klasser som implementerar IVisualStudioContributionClass ↗ eller statiska egenskaper för en typ som implementerar IVisualStudioContributionProperty ↗ .

Lägg till ditt första kommando

Mallen skapar Command1.cs som din första kommandohanterare, som du kan använda som utgångspunkt. Eftersom vi vill göra Visual Studio medvetet om det här kommandot och klassen Command ↗ implementerar IVisualStudioContributionClass ↗, markeras kommandot med attributet VisualStudioContribution.

[VisualStudioContribution]
internal class Command1 : Command
{

Kommandot har en konfigurationsegenskap med namnet CommandConfiguration ↗ , som definierar dess visningsnamn, ikon och placering under Extensions menyn.

    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 },
    };

Konfigurationsegenskaper utvärderas av C#-kompilatorn när tillägget skapas och deras värden sparas som tilläggsmetadata så att Visual Studio kan läsa det utan att läsa in tilläggssammansättningen. Därför har konfigurationsegenskaper ytterligare begränsningar jämfört med normala egenskaper (till exempel måste de vara skrivskyddade).

Du kan se att visningsnamnet för kommandot är "%MyExtension.Command1.DisplayName%", som refererar till strängen MyExtension.Command1.DisplayName i filen, vilket gör att strängen .vsextension/string-resources.json kan lokaliseras.

När kommandot körs anropar Visual Studio till metoden ExecuteCommandAsync ↗ där du kan placera en brytpunkt. Du kan använda context argumentet eller this.Extensibility för att interagera med Visual Studio.

En kommandohanterare kan till exempel vara följande:

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    await this.Extensibility.Shell().ShowPromptAsync(
        "Hello from an extension!", 
        PromptOptions.OK, 
        cancellationToken);
}

Mer information om hur du lägger till kommandon finns i avsnittet Kommandon .

Felsöka tillägget

  1. Kontrollera att tilläggsprojektet har valts som startprojekt i Visual Studio och tryck på F5 för att starta felsökningen.

  2. Om du trycker på F5 byggs tillägget och distribueras det till den experimentella instansen av den version av Visual Studio som du använder. Felsökningsprogrammet bör anslutas så snart tillägget har laddats in.

  3. Du hittar det nya kommandot på Extensions menyn enligt följande bild:

    Skärmbild som visar exempelkommandot i Visual Studio.

    Skärmbild som visar exempelkommandot.

Nästa steg