我想创建Visual Studio的扩展,允许某人在编辑器中选择任何文本,右键单击以获取上下文菜单,然后通过单击我的自定义菜单项对文本执行某些操作
比方说,我的自定义菜单项称为“电子邮件...”。编辑器的新上下文菜单可能如下所示:
断点
运行到光标
剪切
复印
粘贴
电子邮件...
概述
我还想添加一个带有选项的弹出窗口(装饰?)。在这种情况下,它可能是To
,Subject
和CC
字段。
我认为其中一些可以使用MEF使用编辑器扩展来完成,例如弹出窗口和触发电子邮件的实际代码。但看起来我需要VSPackage
来添加上下文菜单项。根据我的阅读,我可以将MEF片段与VSPackage
捆绑在一起。
这是我被卡住的地方。我需要深入参考细节来实现这两个部分,但我还需要有关如何集成它们的信息。 MSDN让我四处走动。
我可以从中学到任何好的,可靠的示例代码或文档(甚至是书籍)吗?
答案 0 :(得分: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
答案 1 :(得分:8)
我完全放弃了处理MEF,VSIX文件等的想法。相反,我选择了Visual Studio加载项,这更容易。
我合并了来自各种资源的代码,例如 Adding Menu Items to context menus inside the Visual Studio .NET IDE 和 Visual Studio Add-in : Creating Context Menus 这些资源有些陈旧且需要清理,但它们运行良好。< / p>