Visual Studio 扩展 - 'Server Explorer' 的上下文菜单

Visual Studio Extention - Context Menu for 'Server Explorer'

在 VSIX 项目中,在 .vsct 文件中我可以看到如何定位不同的对象并提供自定义上下文菜单:

例如,以下将针对解决方案资源管理器中的项目节点:

    <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE"/>
    <!--<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>-->
  </Group>

将 id 属性 从 IDM_VS_CTXT_ITEMNODE 更改为 IDM_VS_CTXT_CODEWIN 将导致上下文菜单出现在代码 window 中。

这在此处记录: Microsoft Documentation

但是,我希望我的上下文菜单显示在 'Server Explorer' 中。文档的示例和 link 会非常有帮助。

要查找 Visual Studio 菜单 guid,这通常有效。 在您的注册表中,将 HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio.0\General.

下的 EnableVSIPLogging DWORD 设置为 1

重新启动 Visual Studio(和计算机?)并按住 Ctrl+Shift 并右键单击服务器资源管理器中的项目,它将打开一个对话框 window,内容如下:

你可以从那里开始。

VS 2015 的所有命令、菜单、工具栏等都在几个 c++ 头文件(stdidcmd.h 和 vsshlids.h)中进行了详细说明。

在我的安装中,它们位于 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VSSDK\VisualStudioIntegration\Common\Inc'。

非常简要地查看了文件,我认为您需要一些开始

  • IDG_SE_CONTEXT_ 到服务器资源管理器上下文菜单中的目标组
  • IDG_SE_TOOLBAR_进入工具栏
  • IDM_SE_CONTEXT_ 进入上下文菜单
  • IDM_SE_TOOLBAR_ 进入工具栏菜单

多亏了 Paul Swetz 和 James Sinclair,我才得以完成这项工作。

使用 Paul Swetz 描述的方法,我可以识别我正在单击的服务器 Window 对象所需的 GUID,在本例中为 table 节点。

得到后,我将该 id 添加到 .vsct 文件中的 Symbols,并使用我选择的名称:

<GuidSymbol name="guidWhatever" value="{d4f02a6a-c5ae-4bf2-938d-f1625bdca0e2}"> <!--//server explorer - table-->
  <IDSymbol name="IDMX_DV_OBJECT_NODE" value="0x8200"/>
</GuidSymbol>

现在我可以在群组中使用它,自定义命令会出现在下拉列表中。

<Groups> 
  <Group guid="guidFirstCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600">
    <!--<Parent guid="{D309F791-903F-11D0-9EFC-00A0C911004F}" id="IDM_VS_CTXT_ITEMNODE"/>-->
    <Parent guid="guidWhatever" id="IDMX_DV_OBJECT_NODE"/>
  </Group>
</Groups>

现在唯一的问题是识别和访问选定的 table 和数据库,但这是另一回事。