Расширение редактора 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: создание контекстных меню которые несколько старые и нуждаются в очистке, но они работали нормально.