在VS解决方案资源管理器中,如何扩展右键单击源代码文件子代码元素(类/方法/字段)的菜单?

11

我正在开发一个Visual Studio扩展程序(VSIX)。

我需要在解决方案资源管理器中类/方法/字段项的右键菜单上添加自定义菜单,这些项可以在源文件项目下找到:

enter image description here

在.vsct文件中,我已经通过以下方式扩展了解决方案资源管理器的项目/文件夹/源文件/引用右键菜单:

<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
</CommandPlacement>
<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" />
</CommandPlacement>
<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_FOLDERNODE" />
</CommandPlacement>
<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_REFERENCE" />
</CommandPlacement>    

我尝试了所有我能找到的值,但都没有成功:

IDM_VS_CTXT_CODEWIN
IDM_VS_CTXT_XPROJ_MULTIITEM
IDM_VS_CTXT_XPROJ_PROJITEM
IDM_VS_CTXT_NOCOMMANDS
IDM_VS_CTXT_REFERENCEROOT

感谢您的帮助。

(请注意,我已经有了解决右键单击的代码元素的棘手代码,从IVsSelectionEvents.OnSelectionChanged()调用,在QueryStatus()处理程序被触发之前)

1个回答

11

请参见:

使用 EnableVSIPLogging 在 VS 2005 + SP1 中识别菜单和命令

以及:

如何查找命令 GUID:ID 对


感谢 Carlos,我成功做到了 :) 让我们稍微解释一下。首先,根据博客文章的说明,我设置了注册表键:

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\General]
"EnableVSIPLogging"=dword:00000001

然后重新启动VS2013,在SlnExplorer窗口中选择一个文件内容类,按住Ctrl+SHIFT并右键单击。我得到了以下结果:

enter image description here

Guid是guidSHLMainMenu,但我需要从值1842(十六进制为0x0732)中获取命令ID。我谷歌了一下,找到了这个答案。我已经安装了VS2013 SDK。我查找了头文件vsshlids.h的位置。它在这里:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VSSDK\VisualStudioIntegration\Common\Inc

在这个目录中,我对任何包含 732 的文本文件进行了搜索。然后我找到了

#define IDM_VS_CTXT_PROJWIN_FILECONTENTS            0x732  // Context menu for GraphNode items in the Solution Explorer

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VSSDK\VisualStudioIntegration\Common\Inc\vsshlids.h
因此,我正在寻找的名称是IDM_VS_CTXT_PROJWIN_FILECONTENTS,确实使用这个值就可以像魔术般正常工作;感谢Carlos!

1
现在这两个链接都失效了(但这不是你的错)。:) 但还是感谢你的帮助。对于VS2017,我需要在regedit中额外选择HKEY_USERS,文件>加载hive,选择文件:“C:\Users\user\AppData\Local\Microsoft\VisualStudio\15.0_effa0b41Exp\privateregistry.bin”键入为vs2017_exp,并选择注册表分支:HKEY_USERS\vs2017_exp\Software\Microsoft\VisualStudio\15.0_effa0b41Exp\General否则完全相同。 - TarmoPikaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接