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

时间:2015-08-01 07:24:36

标签: visual-studio vsix

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

我无法找到正确的父命令/组ID来设法在编辑器上下文菜单上显示自定义按钮。我怀疑那里不是一个单一的Id,而是几个但是我应该关注的任何指导。很难确定正确的父命令Id与编辑器上下文菜单挂钩的内容。

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

相关:无论如何以合理的方式发现菜单命令和组名?在SharedCommandPlace.vsct中尽可能地接近我,但即使这被证明很难与实际的菜单项匹配。

3 个答案:

答案 0 :(得分:10)

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

<强>步骤

  1. 我使用HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General密钥和EnableVSIPLogging值1来启用日志记录。
  2. 然后我导航到编辑器,用鼠标在空白区域按CTRL-SHIFT,然后右键单击鼠标
  3. 这给出了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和Code编辑器)执行此操作,例如我可以通过添加GuidSymbol和Group.You&#39为每个编辑器重复此过程。 ; ll最终在不同父级的同一MenuGroup点有多个Group条目,所有这些条目都将相应激活。

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

答案 1 :(得分:3)

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

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

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

另外,您可能想尝试使用Mads&#34;可扩展性工具&#34; https://visualstudiogallery.msdn.microsoft.com/ab39a092-1343-46e2-b0f1-6a3f91155aa6处的扩展程序。

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

答案 2 :(得分:2)

我需要同样的东西而且我用过:

    <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