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

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

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

Точка остановаБеги к курсоруРезатькопияВставить E-mail ... Описывая

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 19 марта 2012

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

8 голосов
/ 11 июля 2011

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

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

...