Creación de la primera extensión de Visual Studio

Este documento es un inicio rápido que muestra cómo crear la primera extensión mediante VisualStudio.Extensibility. La extensión se ejecuta fuera de proceso, lo que significa fuera del proceso de Visual Studio.

Requisitos previos

  • Visual Studio 2022, versión 17.9, versión preliminar 1 o posterior con Visual Studio extension development carga de trabajo.

Creación del proyecto de extensión

  • Use VisualStudio.Extensibility Project la plantilla para crear un nuevo proyecto de extensibilidad.

Screenshot of the VSExtensibility template.

En este momento, está listo para empezar a extender Visual Studio agregando comandos y componentes del editor a la extensión.

La clase Extension

La plantilla crea una clase que extiende Extension. Esta clase es la primera que se crea una instancia cuando se carga la extensión. En el InitializeServices método , puede agregar sus propios servicios a la colección de servicios para que estén disponibles para la inserción de dependencias.

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

También puede ver el VisualStudioContribution atributo que se usa para marcar los componentes de extensión destinados a ser consumidos por Visual Studio. Este atributo se puede aplicar a las clases que implementan IVisualStudioContributionClass o las propiedades estáticas de un tipo que implementa IVisualStudioContributionProperty.

Adición del primer comando

La plantilla crea Command1.cs como el primer controlador de comandos, que puede usar como punto de partida. Dado que queremos que Visual Studio sea consciente de este comando y la Command clase implementa IVisualStudioContributionClass, el comando se marca con el VisualStudioContribution atributo .

[VisualStudioContribution]
internal class Command1 : Command
{

El comando tiene una propiedad de configuración denominada CommandConfiguration, que define su nombre para mostrar, icono y ubicación en el Extensions menú.

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

El compilador de C# evalúa las propiedades de configuración al compilar la extensión y sus valores se guardan como metadatos de extensión para que Visual Studio pueda leerlo sin cargar el ensamblado de extensión. Por este motivo, las propiedades de configuración tienen restricciones adicionales en comparación con las propiedades normales (por ejemplo, deben ser de solo lectura).

Puede ver que el nombre para mostrar del comando es "%MyExtension.Command1.DisplayName%", que hace referencia a la MyExtension.Command1.DisplayName cadena en el .vsextension/string-resources.json archivo, lo que permite localizar esta cadena.

Cuando se ejecuta el comando, Visual Studio llamará al ExecuteCommandAsync método donde puede colocar un punto de interrupción. Puede usar context el argumento o this.Extensibility el objeto para interactuar con Visual Studio.

Por ejemplo, un controlador de comandos podría ser el siguiente:

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

Para obtener más información sobre cómo agregar comandos, consulte la sección Comandos .

Depuración de la extensión

  1. Asegúrese de que el proyecto de extensión está seleccionado como proyecto de inicio en Visual Studio y presione F5 para iniciar la depuración.

  2. Al presionar se compila F5 la extensión e se implementa en la instancia experimental de la versión de Visual Studio que usa. El depurador debe adjuntar una vez cargada la extensión.

  3. Puede encontrar el nuevo comando en Extensions el menú, como se muestra en la siguiente imagen:

    Screenshot showing sample command.

Pasos siguientes

Si no ha realizado la introducción, consulte Bienvenido a la documentación de extensibilidad de VisualStudio.Extensibility.

Ahora cree una extensión ligeramente más interesante; consulte Creación de una extensión sencilla.