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

Ric*_*ahl 6 visual-studio vsix

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

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

具体来说,我需要能够将Visual in Browser选项中的选项添加到Visual Studio无法识别为HTML/Web文件的文件中(即使它们已映射到相应的编辑器).

相关:无论如何以合理的方式发现菜单命令和组名?在SharedCommandPlace.vsct中进行探索就像我来的那样近,但即使这样也很难与实际的菜单项匹配.

Ric*_*ahl 12

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

脚步

  1. 我使用HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\Generalkey和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   
---------------------------
Run Code Online (Sandbox Code Playgroud)

重要的值是GUID和CommandID.

Symbols像这样添加Guid和Command ID 来注册将Guid映射到CommandSet的命令集,并将CommandId映射到上下文菜单值:

<GuidSymbol name="aspxContextCommandSet" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
  <IDSymbol name="aspxContextMenu" value="0x0035"/>
</GuidSymbol>
Run Code Online (Sandbox Code Playgroud)

请注意,该值映射到表示为十六进制值的CommandID.

然后在以下Groups部分中将此组引用为命令组(MyMenuGroup)的父组:

  <Group guid="guidViewInBrowserPackageCmdSet" id="MyMenuGroup" priority="0x0000">
    <Parent guid="aspxContextCommandSet" id="aspxContextMenu"/>
  </Group>
Run Code Online (Sandbox Code Playgroud)

您可以引用为命令按钮创建的菜单组,并指向上一步中创建的上下文菜单.

如果你想为多个编辑器(例如ASPX,HTML和代码编辑器,例如我这样做)执行此操作,则通过添加GuidSymbol和Group重复此过程.您将最终得到同一MenuGroup的多个组条目位于不同的父级,并且所有组都将相应地激活.

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


小智 6

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

<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
Run Code Online (Sandbox Code Playgroud)

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


小智 3

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

如果 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 文件添加了一个非常有用的自动完成功能。