在VS Solution Explorer中,如何在源文件子代码元素(类/方法/字段)上扩展右键菜单

Pat*_*eam 6 menu visual-studio solution-explorer vsix

我正在开发Visual Studio扩展(VSIX).

我需要在解决方案资源管理器中右键单击类/方法/字段项,在源文件项下找到自定义右键单击菜单:

在此输入图像描述

在.vsct文件中,我已经通过这种方式扩展了Solution Explorer 项目/文件夹/源文件/引用右键菜单:

<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>    
Run Code Online (Sandbox Code Playgroud)

我尝试了所有其他没有成功的价值观:

IDM_VS_CTXT_CODEWIN
IDM_VS_CTXT_XPROJ_MULTIITEM
IDM_VS_CTXT_XPROJ_PROJITEM
IDM_VS_CTXT_NOCOMMANDS
IDM_VS_CTXT_REFERENCEROOT
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

(请注意,我已经有一些棘手的代码来解析右键单击的代码元素,在调用处理程序IVsSelectionEvents.OnSelectionChanged()之前调用QueryStatus())

Car*_*ero 8

看到:

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

和:

如何查找命令GUID:ID对


谢谢卡洛斯,我做了这个工作:)所以让我们解释一下.首先,如博客文章中所述,我设置了regkey:

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\General]
"EnableVSIPLogging"=dword:00000001
Run Code Online (Sandbox Code Playgroud)

然后重新标记VS2013,按住Ctrl + SHIFT并右键单击SlnExplorer窗口中的文件内容类.我懂了:

在此输入图像描述

Guid就是那个guidSHLMainMenu,但我需要从值中获取命令ID 1842(0x0732十六进制).我google了一下,发现了这个答案.我安装了VS2013 SDK.我找了找到头文件的位置vsshlids.h.它是在:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VSSDK\VisualStudioIntegration\Common\Inc
Run Code Online (Sandbox Code Playgroud)

在这个目录中,我搜索了包含的任何文本文件732.我找到了

#define IDM_VS_CTXT_PROJWIN_FILECONTENTS            0x732  // Context menu for GraphNode items in the Solution Explorer
Run Code Online (Sandbox Code Playgroud)

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VSSDK\VisualStudioIntegration\Common\Inc\vsshlids.h
Run Code Online (Sandbox Code Playgroud)

因此,我所寻找的名称是IDM_VS_CTXT_PROJWIN_FILECONTENTS,实际上,这个值就像魅力一样; 谢谢卡洛斯!