我想创建一个Visual Studio的扩展,允许用户在编辑器中选择任何文本,右键单击以获得上下文菜单,然后通过单击我的自定义菜单项对文本执行一些操作。
举个例子,我的自定义菜单项被称为"电子邮件…"。编辑器的新上下文菜单可能看起来像这样:
断点
运行到光标
剪切
复制
粘贴
电子邮件
概述
我还想添加一个带有选项的弹出窗口(装饰?)。在这种情况下,它可以是To
、Subject
和CC
字段。
我认为其中一些可以通过MEF使用编辑器扩展来完成,比如弹出窗口和实际的电子邮件代码。但是看起来我需要一个VSPackage
来添加上下文菜单项。根据我所读到的内容,我可以将MEF部分和VSPackage
捆绑在一起。
这就是我陷入困境的地方。我需要一个详细的深入参考来实现这两个部分,但我也需要关于如何集成它们的信息。MSDN让我兜圈子。
有什么好的、可靠的示例代码或文档(甚至书籍)可以让我学习吗?
1)您可以在扩展中创建并始终获取对EnvDTE的引用。
m_dte = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE));
2) 要直接添加,请在扩展范例中添加菜单项。您只需要修改".VCT"文件。首先,在菜单组中定义菜单命令。在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>
我根据一个关于如何在visualstudio中自动推特或博客代码片段的简洁教程中的例子: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 Add-in:Createing context menus,它们有些旧,需要清理,但运行良好。