我有一个内部扩展,我想添加到 Visual Studio,它应该连接到编辑器上下文菜单 - 无论打开的是什么类型的文件。我可以动态处理启用/可见性,但基本上我希望它可以在任何类型的编辑器文件上访问。
我一直无法找到正确的父命令/组 ID 来设法让自定义按钮显示在编辑器上下文菜单上。我怀疑没有一个 Id,而是有几个 Id,但有关于我应该查看的内容的任何指导。很难弄清楚连接到编辑器上下文菜单的正确父命令 ID 是什么。
具体来说,我需要能够将“在浏览器中查看”选项添加到 Visual Studio 无法识别为 HTML/Web 文件的文件(即使它们已映射到适当的编辑器)。
相关:无论如何有合理的方法来发现菜单命令和组名吗?在 SharedCommandPlace.vsct 中闲逛和我来的一样近,但事实证明即使如此也很难与实际菜单项匹配。
最佳答案
我能够找出上下文菜单的正确命令组。事实证明,各种编辑器都使用单独的上下文 ID,因此必须作为单独的菜单进行管理,因此这很快就会变得困惑。
步骤
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General
键和 EnableVSIPLogging 值为 1 以启用日志记录。 这给了信息
menu group
像这样,它看起来像这样:---------------------------
VSDebug Message
---------------------------
Menu data:
Guid = {D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}
GuidID = 358
CmdID = 53
Type = 0x00000400
Flags = 0x00000000
NameLoc = ASPX Context
---------------------------
OK
---------------------------
重要的值是 GUID 和 CommandID。
在
Symbols
下添加 Guid 和命令 ID像这样注册将 Guid 映射到 CommandSet 并将 CommandId 映射到上下文菜单值的命令集:<GuidSymbol name="aspxContextCommandSet" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
<IDSymbol name="aspxContextMenu" value="0x0035"/>
</GuidSymbol>
请注意,该值映射到表示为十六进制值的 CommandID。
然后在
Groups
中将此组引用为命令组 (MyMenuGroup) 的父级部分:<Group guid="guidViewInBrowserPackageCmdSet" id="MyMenuGroup" priority="0x0000">
<Parent guid="aspxContextCommandSet" id="aspxContextMenu"/>
</Group>
您引用为命令按钮创建的菜单组并指向在上一步中创建的上下文菜单。
如果您想为多个编辑器(即 ASPX、HTML 和代码编辑器,例如我所做的)执行此操作,您可以通过添加 GuidSymbol 和 Group 为每个编辑器重复此过程。您最终会得到同一 MenuGroup 的多个 Group 条目指向不同的父级,并且所有条目都将适当激活。
效果很好,但您可能必须确保过滤您的
OleMenuCommand
带有 BeforeQueryStatus
的对象事件处理程序以确保菜单仅在您实际可以处理时显示。
关于visual-studio - VSIX:将菜单项添加到 Visual Studio 编辑器上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31759396/