Criar sua primeira extensão do Visual Studio

Este documento é um guia de início rápido que mostra como criar sua primeira extensão usando o VisualStudio.Extensibility. A extensão é executada fora do processo, ou seja, fora do processo do Visual Studio.

Pré-requisitos

  • Visual Studio 2022 versão 17.9 Preview 1 ou superior com Visual Studio extension development carga de trabalho.

Criar o projeto de extensão

  • Use VisualStudio.Extensibility Project o modelo para criar um novo projeto de extensibilidade.

Screenshot of the VSExtensibility template.

Neste ponto, você está pronto para começar a estender o Visual Studio adicionando comandos e componentes de editor à sua extensão.

A classe Extension

O modelo cria uma classe que estende Extension. Essa classe é a primeira que é instanciada quando sua extensão é carregada. InitializeServices No método, você pode adicionar seus próprios serviços à coleção de serviços para disponibilizá-los para injeção de dependência.

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

Você também pode ver o VisualStudioContribution atributo que é usado para marcar componentes de extensão que devem ser consumidos pelo Visual Studio. Esse atributo pode ser aplicado a classes que implementam ou propriedades estáticas de um tipo que implementa IVisualStudioContributionClass IVisualStudioContributionProperty.

Adicione seu primeiro comando

O modelo é criado Command1.cs como seu primeiro manipulador de comandos, que você pode usar como ponto de partida. Como queremos tornar o Visual Studio ciente desse comando, e a classe implementa Command IVisualStudioContributionClass, o comando é marcado com o VisualStudioContribution atributo .

[VisualStudioContribution]
internal class Command1 : Command
{

O comando tem uma propriedade de configuração chamada CommandConfiguration, que define seu nome de exibição, ícone e posicionamento no Extensions menu.

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

As propriedades de configuração são avaliadas pelo compilador C# ao criar a extensão e seus valores são salvos como metadados de extensão para que o Visual Studio possa lê-lo sem carregar o assembly de extensão. Por esse motivo, as propriedades de configuração têm restrições adicionais em comparação com as propriedades normais (por exemplo, elas devem ser somente leitura).

Você pode ver que o nome de exibição do comando é "%MyExtension.Command1.DisplayName%", que faz referência à MyExtension.Command1.DisplayName cadeia de caracteres no .vsextension/string-resources.json arquivo, permitindo que essa cadeia de caracteres seja localizada.

Quando o comando é executado, o Visual Studio chamará o ExecuteCommandAsync método onde você pode colocar um ponto de interrupção. Você pode utilizar context argumento ou this.Extensibility objeto para interagir com o Visual Studio.

Por exemplo, um manipulador de comandos pode ser o seguinte:

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

Para obter mais informações sobre como adicionar comandos, consulte a seção Comandos .

Depurar sua extensão

  1. Certifique-se de que seu projeto de extensão está selecionado como projeto de inicialização no Visual Studio e pressione F5 para iniciar a depuração.

  2. Pressionar F5 cria sua extensão e implanta-a na instância experimental da versão do Visual Studio que você está usando. O depurador deve ser anexado assim que sua extensão for carregada.

  3. Você pode encontrar o novo comando no Extensions menu, conforme mostrado na imagem a seguir:

    Screenshot showing sample command.

Próximas etapas

Se você perdeu as visões gerais introdutórias, consulte Bem-vindo à documentação do VisualStudio.Extensibility.

Agora crie uma extensão um pouco mais interessante; consulte Criar uma extensão simples.