繁体   English   中英

VSIX:将菜单项添加到 Visual Studio 编辑器上下文菜单

[英]VSIX: Adding a Menu Item to the Visual Studio Editor Context Menu

我有一个内部扩展,我想添加到 Visual Studio,它应该连接到编辑器上下文菜单 - 无论打开的是什么类型的文件。 我可以动态处理启用/可见性,但基本上我希望它可以在任何类型的编辑器文件上访问。

我一直无法找到正确的父命令/组 ID 来设法让自定义按钮显示在编辑器上下文菜单上。 我怀疑没有一个 Id,而是有几个 Id,但有关于我应该查看的内容的任何指导。 很难弄清楚连接到编辑器上下文菜单的正确父命令 ID 是什么。

具体来说,我需要能够将“在浏览器中查看”选项添加到 Visual Studio 无法识别为 HTML/Web 文件的文件(即使它们已映射到适当的编辑器)。

相关:无论如何有合理的方法来发现菜单命令和组名吗? 在 SharedCommandPlace.vsct 中闲逛与我来的一样接近,但事实证明即使如此也很难与实际菜单项匹配。

我能够找出上下文菜单的正确命令组。 事实证明,各种编辑器都使用单独的上下文 ID,因此必须作为单独的菜单进行管理,因此这很快就会变得混乱。

脚步

  1. 我使用HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\General键和 EnableVSIPLogging 值 1 来启用日志记录。
  2. 然后我导航到编辑器,用鼠标在空白区域按 CTRL-SHIFT,然后右键单击鼠标

这为信息提供了一个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 和 Command 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 条目指向不同的父级,并且所有条目都将适当激活。

效果很好,但您可能必须确保使用BeforeQueryStatus事件处理程序过滤您的OleMenuCommand对象,以确保菜单仅在您实际可以处理时显示。

我需要同样的东西,我使用了:

<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>

所以,我只是改变了id。 请参阅: https : //msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.vsmenus.idm_vs_ctxt_codewin.aspx

EnableVSIPLogging 注册表值仍然适用于 VS 2015。您只需要在 HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\General 下添加一个 EnableVSIPLogging DWORD 设置为 1。

如果 CTRL+SHIFT + 菜单弹出或菜单选择,不会导致该对话框,则有问题的菜单项可能未实现为 VSCT 资源。

话虽如此,您可能需要进行一些试验,因为编辑器和设计器不需要使用与代码编辑器相同的上下文菜单。

此外,您可能想在https://visualstudiogallery.msdn.microsoft.com/ab39a092-1343-46e2-b0f1-6a3f91155aa6 (2017) 或https://marketplace.visualstudio.com/上试用 Mads“可扩展性工具”扩展items?itemName=MadsKristensen.ExtensibilityEssentials2019 (2019)。

他为非常有用的 VSCT 文件添加了一个很好的自动完成功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM