Поделиться через


Создание первого расширения Visual Studio

В этом документе описано, как создать первое расширение с помощью VisualStudio.Extensibility. Расширение выполняется вне процесса, т. е. за пределами процесса Visual Studio.

Необходимые компоненты

  • Visual Studio 2022 версии 17.9( предварительная версия 1 или более поздняя версия) с Visual Studio extension development рабочей нагрузкой.

Создание проекта расширения

  • Используйте VisualStudio.Extensibility Project шаблон для создания проекта расширяемости.

Screenshot of the VSExtensibility template.

На этом этапе вы можете начать расширение Visual Studio, добавив команды и компоненты редактора в расширение.

Класс Extension

Шаблон создает класс, который расширяется Extension. Этот класс является первым экземпляром при загрузке расширения. В методе можно добавить собственные InitializeServices службы в коллекцию служб, чтобы сделать их доступными для внедрения зависимостей.

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

Вы также можете увидеть VisualStudioContribution атрибут, используемый для маркировки компонентов расширения, которые предназначены для использования Visual Studio. Этот атрибут можно применять к классам, реализующим IVisualStudioContributionClass или статическим свойствам реализующего IVisualStudioContributionPropertyтипа.

Добавление первой команды

Шаблон создает Command1.cs в качестве первого обработчика команд, который можно использовать в качестве отправной точки. Так как мы хотим, чтобы Visual Studio знала об этой команде, и Command класс реализует, команда помечается IVisualStudioContributionClassатрибутом VisualStudioContribution .

[VisualStudioContribution]
internal class Command1 : Command
{

Команда имеет свойство конфигурации с именем CommandConfiguration, которое определяет отображаемое имя, значок и размещение в Extensions меню.

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

Свойства конфигурации оцениваются компилятором C# при создании расширения и их значения сохраняются в виде метаданных расширения, чтобы Visual Studio могли считывать его без загрузки сборки расширения. По этой причине свойства конфигурации имеют дополнительные ограничения по сравнению с обычными свойствами (например, они должны быть прочитаны).

Отображается "%MyExtension.Command1.DisplayName%"отображаемое имя команды, которая ссылается на MyExtension.Command1.DisplayName строку в .vsextension/string-resources.json файле, что позволяет локализовать эту строку.

При выполнении команды Visual Studio вызовет ExecuteCommandAsync метод, где можно разместить точку останова. Для взаимодействия с Visual Studio можно использовать context аргумент или this.Extensibility объект.

Например, обработчик команд может быть следующим:

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

Дополнительные сведения о добавлении команд см. в разделе "Команды".

Отладка расширения

  1. Убедитесь, что проект расширения выбран в качестве запускаемого проекта в Visual Studio и нажмите клавишу F5 , чтобы начать отладку.

  2. При нажатии клавиши F5 "Создать расширение" и развернуть его в экспериментальном экземпляре используемой версии Visual Studio. Отладчик должен присоединиться после загрузки расширения.

  3. Вы можете найти новую команду в Extensions меню, как показано на следующем рисунке:

    Screenshot showing sample command.

Следующие шаги

Если вы пропустили общие сведения, ознакомьтесь с документацией по VisualStudio.Extensibility.

Теперь создайте немного более интересное расширение; См. статью "Создание простого расширения".