通过添加上下文菜单项来扩展Visual Studio 2010编辑器以操纵所选文本

15
我想创建一个Visual Studio扩展,允许用户在编辑器中选择任何文本,在右键单击弹出上下文菜单,并通过单击我的自定义菜单项对文本执行某些操作。
例如,假设我的自定义菜单项名为“Email...”,那么编辑器的新上下文菜单可能如下所示:
- Breakpoint - Run to Cursor - Cut - Copy - Paste - **Email...** - Outlining
我还想添加一个弹出式(装饰?)菜单,其中包含选项,比如 To、Subject 和 CC 字段等。
我认为可以通过使用编辑器扩展的 MEF 来完成其中一部分工作,比如弹出式菜单和发送电子邮件的实际代码。但是看起来我需要一个 `VSPackage` 来添加上下文菜单项。根据我所了解的,我可以将 MEF 部分和 `VSPackage` 打包到一起。
这就是我遇到困难的地方。我需要详尽的参考资料来实现两个部分的细节,但我也需要信息来整合它们。MSDN 让我打转了好几圈。
是否有任何好的、可靠的示例代码或文档(甚至图书)可以让我学习?

虽然不是直接回答,但我仍然想分享一个有用的链接,该链接深入探讨了VS包开发和扩展资源。 - Antony Thomas
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自动发布代码片段到Twitter或博客:http://solutions.developer.com/ms/web-dev/visual-studio/codeblog-writing-a-blogging-extension-for-visual-studio-2010.html


2
谢谢,gameweld。那个ID应该是“IDM_VS_CTXT_CODEWIN”,而不是“IDM_VS_CTX_CODEWIN”。 - Brian Schroer

8

2
不错的交易,但是你需要知道,在VS 2013中插件已经被弃用了。所以看起来他们要强制我们使用扩展了。 - Philter
这个答案现在更多或少已经过时了,为了满足常见问题解答,它不应该被选为最佳答案。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接