Первое расширение Visual Studio
В этой статье описаны некоторые простые шаги, чтобы получить первое расширение Visual Studio и запустить его. Расширение Visual Studio записывается с помощью платформа .NET Framework и C#. Если вы уже разработчик .NET, вы обнаружите, что написание расширений аналогично написанию большинства других программ и библиотек .NET.
Расширение, которое вы будете писать сегодня, добавляет команду, которая вставляет новый guid в текстовый редактор при выполнении. Это простое, полезное и хорошее введение в различные аспекты разработки расширений.
Если вы являетесь визуальным учеником, проверка из этого короткого видео кого-то из руководства.
Прежде чем приступить к написанию первого расширения Visual Studio (это легко, я обещаю!), убедитесь, что у вас есть необходимые инструменты.
Создание проекта
Существует несколько шаблонов проектов для выбора, поэтому вы хотите сделать правильный выбор. Шаблоны, используемые в этом наборе средств сообщества, имеют моникер (сообщество) в имени.
Шаблон проекта VSIX w/Command (Community) поставляется с командой, подключенной к ней, что упрощает запуск. Это отличная отправная точка для большинства расширений. Если вы знаете, что требуется окно инструментов, используйте шаблон проекта VSIX w/Tool Window (Community). Она также имеет команду, чтобы открыть окно инструментов.
Используйте шаблоны пустого проекта VSIX (сообщества) или VSIX Project (Community) для расширений только для MEF или других расширенных сценариев.
На этот раз вы выберете шаблон проекта VSIX w/Command (Community), как показано на снимке экрана ниже.
Выбрав шаблон проекта, необходимо указать имя проекта. Вызовите его InsertGuid.
После нажатия кнопки "Создать " вы должны в конечном итоге получить базовый проект VSIX, который выглядит следующим образом:
Важные файлы
Давайте рассмотрим самые важные файлы.
InsertGuidPackage.cs — это то, что называется классом Package. Его InitializeAsync(...)
метод вызывается Visual Studio для инициализации расширения. Здесь вы добавляете прослушиватели событий и регистрируете команды, окна инструментов, параметры и другие вещи.
source.extension.vsixmanifest — это файл манифеста для расширения. Он содержит метаданные, такие как название и описание, но также сведения о том, что содержит расширение.
VSCommandTable.vsct — это XML-файл, в котором команды и привязки ключей декларативно определены, поэтому их можно зарегистрировать в Visual Studio.
Commands/MyCommand.cs — это обработчик команд для команды, определенной в VSCommandTable.vsct-файле . Он управляет тем, что происходит при выполнении команды, нажав кнопку.
Изменение команды
Сначала необходимо убедиться, что команда имеет правое имя, значок и позицию в системе меню Visual Studio.
Откройте VSCommandTable.vsct-файл и найдите <Group>
файл и объект<Button>
. Обратите внимание, что кнопка указывает группу как ее родительскую и родительскую группу — это встроенное меню VSMainMenu/Tools .
Для расширения необходимо , чтобы кнопка "Вставить GUID" должна находиться в главном меню "Изменить ", поэтому вы будете повторно родительскую группу в меню "Изменить". Замените инструменты на "Изменить", как показано в следующем фрагменте кода:
<Group guid="InsertGuid" id="MyMenuGroup" priority="0x0600">
<Parent guid="VSMainMenu" id="Edit"/>
</Group>
Вы получаете полный IntelliSense для размещения, чтобы упростить поиск подходящего места.
Необходимо <Button>
также обновить. Вы предоставите ему новый значок, обновив id
атрибут <Icon>
элемента на InsertAppend. <ButtonText>
Обновите текст с хорошим, описательным именем и обновите <LocCanonicalName>
его с помощью технического имени команды. Это имя, отображаемое пользователям при назначении пользовательских сочетаний клавиш в диалоговом окне "Параметры > среды клавиатуры > инструментов>".
<Button guid="InsertGuid" id="MyCommand" priority="0x0100" type="Button">
<Parent guid="InsertGuid" id="MyMenuGroup" />
<Icon guid="ImageCatalogGuid" id="PasteAppend" />
<CommandFlag>IconIsMoniker</CommandFlag>
<Strings>
<ButtonText>Insert GUID</ButtonText>
<LocCanonicalName>.Edit.InsertGuid</LocCanonicalName>
</Strings>
</Button>
Примечание.
Всегда начинайте <LocCanonicalName>
с символа точки. Он гарантирует, что другой текст автоматически не задается, и точка не будет отображаться.
Вы можете использовать тысячи значков, доступных в библиотеке образов Visual Studio, и даже получить предварительную версию в IntelliSense:
Теперь вы обновили имя, значок и расположение нашей команды, и пришло время написать код, чтобы вставить guid в текстовый редактор.
Откройте файл /Commands/MyCommand.cs и измените его, чтобы вставить новый guid при выполнении:
using System;
using Community.VisualStudio.Toolkit;
using EnvDTE;
using Microsoft.VisualStudio.Shell;
using Task = System.Threading.Tasks.Task;
namespace InsertGuid
{
[Command(PackageIds.MyCommand)]
internal sealed class MyCommand : BaseCommand<MyCommand>
{
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
{
await Package.JoinableTaskFactory.SwitchToMainThreadAsync();
DocumentView docView = await VS.Documents.GetActiveDocumentViewAsync();
if (docView?.TextView == null) return;
SnapshotPoint position = docView.TextView.Caret.Position.BufferPosition;
docView.TextBuffer?.Insert(position, Guid.NewGuid().ToString());
}
}
}
Объект используется VS
для получения активного текстового представления редактора, а затем вставки guid в положение курсора текстового буфера.
Примечание.
Вы увидите await JoinableTaskFactory.SwitchToMainThreadAsync()
и ThreadHelper.ThrowIfNotOnUIThread()
во многих местах в этом наборе средств сообщества. Они обрабатывают рекомендации по переключению потоков, и вам не нужно знать, когда и как их использовать на этом этапе - предупреждения компилятора с исправлениями кода (лампочки) делает это супер легко.
Первый черновик нашего расширения теперь завершен, и пришло время протестировать его.
Выполнение и отладка
Запуск расширения выполняется так же просто, как и любой другой проект .NET. Просто нажмите клавишу F5, чтобы запустить с подключенным отладчиком или ctrl+F5 для выполнения без этого.
Это приведет к запуску экспериментального экземпляра Visual Studio с установленным расширением. Экспериментальный экземпляр — это обычная версия Visual Studio, но с отдельными параметрами и расширениями. Это помогает отделить вещи.
При запуске экспериментального экземпляра в главном меню "Изменить" должна появиться команда INSERT GUID.
Откройте любой текстовый файл и выполните команду, чтобы вставить новый guid. Вот и все!
Итоги
Теперь вы создали свое первое расширение, которое добавляет кнопку команды в главное меню и взаимодействует с текстовым редактором при выполнении.
Поздравляю!!
Код для этого расширения можно найти в репозитории примеров.