Создание первого расширения Visual Studio
В этом документе описано, как создать первое расширение с помощью VisualStudio.Extensibility. Расширение выполняется вне процесса, т. е. за пределами процесса Visual Studio.
Необходимые компоненты
- Visual Studio 2022 версии 17.9( предварительная версия 1 или более поздняя версия) с
Visual Studio extension development
рабочей нагрузкой.
Создание проекта расширения
- Используйте
VisualStudio.Extensibility Project
шаблон для создания проекта расширяемости.
На этом этапе вы можете начать расширение 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);
}
Дополнительные сведения о добавлении команд см. в разделе "Команды".
Отладка расширения
Убедитесь, что проект расширения выбран в качестве запускаемого проекта в Visual Studio и нажмите клавишу
F5
, чтобы начать отладку.При нажатии клавиши
F5
"Создать расширение" и развернуть его в экспериментальном экземпляре используемой версии Visual Studio. Отладчик должен присоединиться после загрузки расширения.Вы можете найти новую команду в
Extensions
меню, как показано на следующем рисунке:
Следующие шаги
Если вы пропустили общие сведения, ознакомьтесь с документацией по VisualStudio.Extensibility.
Теперь создайте немного более интересное расширение; См. статью "Создание простого расширения".