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

标签 visual-studio vsix

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

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

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

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

最佳答案

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

步骤

  • 我用了 HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General键和 EnableVSIPLogging 值为 1 以启用日志记录。
  • 然后我导航到编辑器,用鼠标在空白区域按 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 和命令 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/

    相关文章:

    visual-studio - 使用 PowerShell 打开文件

    visual-studio-2010 - 如何创建运行 VSIX 方法的快捷方式?

    c++ - cmake - Visual Studio 过滤器的支持

    .net - 错误 : . NET Framework 4.7.2 或更高版本的更新已安装在此计算机上

    c# - 访问 Visual Studio 扩展中的当前代码 Pane

    powershell - 启动进程不适用于 VSIXInstaller.exe

    installation - VS2017 VSIX安装程序安装失败

    visual-studio - 将 VSIX 包标记为需要重新启动

    c# - 如何为 Xamarin.Android 设置 Visual Studio?

    asp.net - 是否有宏/扩展将 Visual Studio 中的所有 Web 项目设置为 "Don' t 打开页面”?