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.
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
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.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.Você pode encontrar o novo comando no
Extensions
menu, conforme mostrado na imagem a seguir:
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.