0

我试图将我们的 SSMS 2014 插件重写为 SSMS 2016 的扩展。

我似乎找不到将菜单或命令添加到对象资源管理器的上下文菜单的方法。

在 Microsoft 网站上,我可以找到所有窗口 ( https://msdn.microsoft.com/en-us/library/cc826118.aspx ) 的大量 id,但对象浏览器却没有(对象浏览器是不同的窗口)

对于解决方案资源管理器,我可以在 vsct 文件中使用以下内容:

<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_SOLNNODE"/>

谁能告诉我对象资源管理器上下文菜单的 ID?

4

1 回答 1

1

像这样的东西

private IObjectExplorerService explorerService;
private List<MenuItem> menuItems = new List<MenuItem>();
// init
explorerService = DteServices.GetService<IObjectExplorerService>(dte);
//
explorerService.GetSelectedNodes(out nodeCount, out nodes);
INodeInformation node = nodes[0];
IMenuHandler menuHandler = node.GetService(typeof(IMenuHandler)) as IMenuHandler;
MethodInfo addChildMethod = menuHandler.GetType().GetMethod("AddChild");

for (int i = 0; i < menuItems.Count; i++)
  addChildMethod.Invoke(menuHandler, new object[] { string.Empty, menuItems[i] });

DteServices - 这是我们的内部类。请查看 MSDN How to: Get a Service from the DTE Object

于 2017-04-14T09:04:18.977 回答