如何以编程方式从 VSPackage 打开 NuGet 包管理器 GUI

How to programmatically open the NuGet Package Manager GUI from a VSPackage

有没有办法从用 C# 实现的 VSPackage 以编程方式打开 NuGet 包管理器 GUI?

这个想法是让用户可以从 ErrorTask 条目快速导航到可以解决特定问题的程序包管理器。

有几种不同的方法可以做到这一点。

  1. 确定用于显示工具窗口的命令,并使用 IVsUIShell.PostExecCommand 有效模仿 select 工具|Nuget 包管理器|包管理器控制台菜单项。

您将需要使用 EnableVSIPLogging 注册表值来识别唯一标识菜单命令的 guid:id 对,如以下博客条目中所述:

Using EnableVSIPLogging to identify menus and commands with VS 2005 + SP1

提示,不要弄乱注册表,考虑安装 Mads Kristensen 的“Extensibility Tools”扩展,它会在 IDE 的 "View" 下添加一个 "Enable VSIP Logging" 菜单项] 菜单。打开它并重新启动 VS 后,您可以按住 SHIFT+CTRL 键,然后单击 "Package Manager Console" 菜单项,该菜单项将显示一个诊断对话框,其中包含您刚刚单击的命令的 guid 和 id。

  1. 识别工具窗口,并使用 IVsUIShell.FindToolWindowEx 检索程序包管理器控制台工具窗口,并以编程方式 display/activate 它。

并非所有的工具窗口 guid 都已发布,但您通常可以使用 Paul Harrington 的“Component Diagnostics”扩展来找出它们。安装扩展后,您可以通过帮助|组件诊断菜单项调用它。在“组件诊断”对话框的左侧窗格中,您需要 select "Selection and UIContext" 类别。在对话框的右侧窗格中,您需要 select "Live Contexts" 选项卡。

完成 selected 后,切换回 VS IDE,然后打开包管理器控制台工具窗口,然后在其中单击以确保它已激活。您应该看到工具窗口的上下文 guid 显示在 "Live Contexts" 窗格下方。在大多数情况下,UI 上下文与唯一标识工具窗口的 guid 的值相同。

一旦确定了 guid,就可以使用 IVsUIShell.FindToolWindowEx 方法(如果需要创建它)并检索它的 IVsWindowFrame 接口。使用 IVsWindowFrame 界面,您可以显示和激活工具窗口。