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

问题描述 投票:7回答:3

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

我一直找不到正确的父命令组id来管理自定义按钮显示在编辑器上下文菜单上。我怀疑不是一个ID,而是几个,但任何指导,我应该看什么。有一个困难的时间弄清楚什么是正确的父命令Id是挂到编辑器上下文菜单。

具体来说,我需要能够将 "在浏览器中查看 "选项添加到Visual Studio无法识别为HTMLWeb文件的文件中(即使它们被映射到相应的编辑器)。

相关的。有没有什么合理的方法来发现菜单命令和组名?在SharedCommandPlace.vsct中摸索是我最接近的方法,但即使是这样也很难匹配到实际的菜单项。

visual-studio vsix
3个回答
13
投票

我能够找出上下文菜单的正确命令组。事实证明,不同的编辑器都使用不同的上下文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。

将Guid和CommandID添加到 Symbols 这样注册命令集,将 Guid 映射到 CommandSet,将 CommandId 映射到上下文菜单值。

<GuidSymbol name="aspxContextCommandSet" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
  <IDSymbol name="aspxContextMenu" value="0x0035"/>
</GuidSymbol>

注意,值映射到以十六进制值表示的CommandID。

然后将这个组引用为你的命令组(MyMenuGroup)的父组。Groups 部分。

<Group guid="guidViewInBrowserPackageCmdSet" id="MyMenuGroup" priority="0x0000">
  <Parent guid="aspxContextCommandSet" id="aspxContextMenu"/>
</Group>

你引用你为命令按钮创建的菜单组,并指向上一步创建的上下文菜单。

如果你想为多个编辑器(例如ASPX、HTML和代码编辑器,我就是这样做的)重复这个过程,为你的每个编辑器添加GuidSymbol和Group.你将最终为同一个MenuGroup指向不同的父级菜单的多个Group条目,并且所有的Group都将适当地激活。

效果很好,但你可能要确保你过滤你的 OleMenuCommand 对象具有 BeforeQueryStatus 事件处理程序,以确保菜单只在你实际可以处理的时候才会显示。


5
投票

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

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

所以,我只是改变了id。请看。https: /msdn.microsoft.comen-uslibrarymicrosoft.visualstudio.shell.vsmenus.idm_vs_ctxt_codewin.aspx。


3
投票

启用VSIPLogging注册表值对VS 2015仍然有效。你只需要在HKEY_CURRENT_USER/SOFTWARE/Microsoft/VisualStudio/14.0/General下添加一个EnableVSIPLogging DWORD设置为1。

如果CTRL+SHIFT+菜单弹出或菜单选择没有导致该对话框,那么有可能是该菜单项没有作为VSCT资源执行。

也就是说,你可能需要做一点实验,因为编辑器和设计师并不需要使用与代码编辑器相同的上下文菜单。

另外,你可能需要尝试一下Mads的 "可扩展性工具 "扩展,地址是 https:/visualstudiogallery.msdn.microsoft.comab39a092-1343-46e2-b0f1-6a3f91155aa6。.

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

© www.soinside.com 2019 - 2024. All rights reserved.