通过添加上下文菜单项来操作选定的文本来扩展Visual Studio 2010编辑器

And*_*est 15 mef contextmenu visual-studio-2010 vspackage

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

比方说,我的自定义菜单项称为"电子邮件...".编辑器的新上下文菜单可能如下所示:

断点
运行到光标
切割
复制
粘贴
电子邮件...
概述

我还想添加一个带有选项的弹出窗口(装饰?).在这种情况下,它可能会之类的东西To,SubjectCC领域.

我认为一些这是可以做到的MEF使用编辑器扩展,如弹出,点燃了一封电子邮件的实际代码.但看起来我需要VSPackage添加上下文菜单项.从我读过的内容来看,我可以将MEF片和VSPackage它们捆在一起.

这是我被卡住的地方.我需要深入参考细节来实现这两个部分,但我还需要有关如何集成它们的信息.MSDN让我绕圈子走了.

我可以从中学到任何好的,可靠的示例代码或文档(甚至是书籍)吗?

gam*_*eld 19

1)您可以创建始终在扩展中获得对EnvDTE的引用.

m_dte = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE));
Run Code Online (Sandbox Code Playgroud)

2)直接添加扩展范例中的菜单项.您只需修改".VSCT"文件即可.首先,菜单命令在菜单组中定义.在VSCT文件中,组定义如下所示:

<Group guid="guidCodeBlogCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>
Run Code Online (Sandbox Code Playgroud)

若要将"电子邮件"菜单项的快捷菜单,我们需要做的是指定的代码窗口上下文编辑器作为母公司的菜单组,使用标识符IDM_VS_CTX_CODEWIN:

<Group guid="guidCodeBlogCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
</Group>
Run Code Online (Sandbox Code Playgroud)

我基于一个简洁的教程,基于如何从visual studio自动发布或博客代码片段来建立这个例子:http://solutions.developer.com/ms/web-dev/visual-studio/codeblog-writing-a-blogging -extension换视觉工作室2010.html

  • 谢谢,gameweld.该ID应该是"IDM_VS_CTXT_CODEWIN",而不是"IDM_VS_CTX_CODEWIN". (2认同)

And*_*est 8

我完全放弃了处理MEF,VSIX文件等的想法.相反,我选择了Visual Studio加载项,这更容易.

我将各种资源(如添加菜单项)中的代码组合到Visual Studio .NET IDEVisual Studio外接程序中的上下文菜单中:创建上下文菜单,这些菜单有些陈旧且需要清理,但它们工作正常.

  • 很好,但是你知道,在VS 2013中,加载项已被弃用.所以看起来它们会迫使我们使用扩展. (2认同)