Расширение редактора Visual Studio 2010 путем добавления элемента контекстного меню для управления выбранным текстом
Я хотел бы создать расширение для Visual Studio, которое позволит кому-то выбрать любой текст в редакторе, щелкнуть правой кнопкой мыши, чтобы получить контекстное меню, а затем выполнить некоторые действия над текстом, нажав на мой пользовательский пункт меню.
Скажем, например, что мой пользовательский пункт меню называется "Электронная почта...". Новое контекстное меню для редактора может выглядеть примерно так:
Точка останова
Run to Cursor
Вырезать
Копировать
Вставить
Электронная почта...
Изложение
Я также хотел бы добавить всплывающее окно (украшение?) с параметрами. В этом случае это могут быть такие вещи, как To
, Subject
и CC
.
Я думаю, что некоторые из этих действий можно сделать с помощью MEF с помощью расширений редактора, например всплывающего окна и фактического кода для отключения электронной почты. Но похоже, что мне нужно VSPackage
добавить элемент контекстного меню. Из того, что я прочитал, я могу объединить часть MEF и VSPackage
вместе.
Вот где я застрял. Мне нужна подробная информация о деталях для реализации обеих частей, но мне также нужна информация о том, как их интегрировать. MSDN меня кружит в кругах.
Есть ли какой-нибудь хороший, прочный примерный код или документация (даже книги), из которых я могу узнать?
Ответы
Ответ 1
Я полностью отказался от своей идеи работы с файлами MEF, VSIX и т.д. Вместо этого я пошел с надстройкой Visual Studio, которая была намного проще.
Я комбинировал код из различных ресурсов, таких как Добавление элементов меню в контекстные меню внутри Visual Studio.NET IDE и надстройка Visual Studio: создание контекстных меню, которые несколько старые и нуждаются в очистке, но они отлично работали.
Ответ 2
1) Вы можете создать всегда ссылку на EnvDTE в расширении.
m_dte = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE));
2) Чтобы добавить, пункт меню в парадигме расширения. Вам просто нужно изменить файл ".VSCT". Во-первых, команда меню определяется в группе меню. В файле VSCT определение группы выглядит следующим образом:
<Group guid="guidCodeBlogCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>
Чтобы переместить пункт меню "Электронная почта" в контекстное меню, все, что нам нужно сделать, это указать редактор контекста окна кода в качестве родителя для группы меню, используя идентификатор IDM_VS_CTX_CODEWIN:
<Group guid="guidCodeBlogCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
</Group>
Я основал этот пример из аккуратного учебника о том, как автоматически чирикать или записывать фрагмент кода из visual studio: http://solutions.developer.com/ms/web-dev/visual-studio/codeblog-writing-a-blogging-extension-for-visual-studio-2010.html