Criar sua primeira extensão de Visual Studio

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

Pré-requisitos

  • Visual Studio 2022 versão 17.9 Versão prévia 1 ou superior com carga de trabalho Visual Studio extension development.

Criar o projeto de extensão

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

Captura de tela do modelo VSExtensibility.

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

A classe Extensão

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

[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 atributo VisualStudioContribution usado para marcar componentes de extensão que devem ser consumidos por Visual Studio. Esse atributo pode ser aplicado a classes que implementam IVisualStudioContributionClass ou propriedades estáticas de um tipo que está implementando IVisualStudioContributionProperty.

Adicionar seu primeiro comando

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

[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 compilar a extensão e seus valores são salvos como metadados de extensão para que Visual Studio possam lê-la 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 chama o método ExecuteCommandAsync, no qual você pode definir um ponto de interrupção. Você pode utilizar context argumento ou this.Extensibility objeto para interagir com 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. Verifique se o projeto de extensão está selecionado como projeto de inicialização no Visual Studio e pressione F5 para iniciar a depuração.

  2. Ao pressionar F5, sua extensão é compilada e implantada na instância experimental da versão do Visual Studio que você está usando. O depurador deve ser anexado depois que a extensão for carregada.

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

    Screenshot mostrando o comando de exemplo em Visual Studio.

    Captura de tela mostrando o comando de exemplo.

Próximas Etapas 

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

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