Расширение редактора Visual Studio 2010 путем добавления элемента контекстного меню для управления выделенным текстом

Я хотел бы создать расширение для Visual Studio, которое позволит кому-то выбрать любой текст в Редакторе, щелкните правой кнопкой мыши, чтобы получить контекстное меню, а затем выполните некоторые действия над текстом, нажав на мой пользовательский пункт меню.

предположим, например, что мой пользовательский пункт меню называется " электронная почта...". Новое контекстное меню редактора может выглядеть примерно так:

точка останова
Run To Cursor
Вырезать
скопировать
Вставить
Эл.Почта...
описанием

Я хотел бы добавить всплывающее окно (украшение?) с вариантами. В этом случае это могут быть такие вещи, как To, Subject и CC поля.

Я думаю, что некоторые из этого можно сделать с MEF использование расширений редактора, таких как всплывающее окно и фактический код для запуска электронной почты. Но, похоже, мне нужен VSPackage чтобы добавить пункт контекстного меню. Из того, что я прочитал, я могу связать часть MEF и VSPackage вместе.

вот где я застрял. Мне нужна углубленная ссылка с деталями для реализации обеих частей, но мне также нужна информация о том, как их интегрировать. MSDN заставляет меня ходить по кругу.

есть ли хороший, надежный пример кода или документации (даже книги), из которых я могу учиться?

2 ответов


1)вы всегда можете создать ссылку на EnvDTE в расширении.

m_dte = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE));

2), чтобы напрямую добавить, пункт меню в парадигме расширения. Вам просто нужно изменить ".Файл ВМКТ". Во-первых, команда меню определяется в группе меню. В файле 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


Я полностью отказался от своей идеи иметь дело с файлами MEF, VSIX и т. д. Вместо этого я пошел с надстройкой Visual Studio, которая была намного проще.

Я объединил код из различных ресурсов, таких как добавление элементов меню в контекстные меню в Visual Studio .NET IDE и надстройка Visual Studio: создание контекстных меню которые несколько старые и нуждаются в очистке, но они работали нормально.