15

我想为 Visual Studio 创建一个扩展,允许某人在编辑器中选择任何文本,右键单击以获取上下文菜单,然后通过单击我的自定义菜单项对文本执行一些操作。

例如,假设我的自定义菜单项称为“电子邮件...”。编辑器的新上下文菜单可能如下所示:

断点
运行到光标
剪切
复制
粘贴
电子邮件...
大纲

我还想添加一个带有选项的弹出窗口(装饰?)。在这种情况下,它可能是 、 和字段之类ToSubject东西CC

我认为其中一些可以通过使用编辑器扩展的MEF来完成,例如弹出窗口和用于触发电子邮件的实际代码。但看起来我需要VSPackage添加上下文菜单项。从我读过的内容来看,我可以将 MEF 部分捆绑VSPackage在一起。

这就是我卡住的地方。我需要详细的参考资料来实现这两个部分,但我还需要有关如何集成它们的信息。MSDN让我绕圈子。

是否有任何好的、可靠的示例代码或文档(甚至书籍)可供我学习?

4

2 回答 2

19

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

于 2012-03-18T20:41:39.630 回答
8

I totally scrapped my idea of dealing with MEF, VSIX files, etc. Instead I went with a Visual Studio add-in which was much easier.

I combined code from various resources like Adding Menu Items to context menus inside the Visual Studio .NET IDE and Visual Studio Add-in : Creating Context Menus which are somewhat old and needed cleaning up, but they worked fine.

于 2011-07-10T20:31:00.417 回答