FindToolWindow Exception

本文关键字:Exception FindToolWindow | 更新日期: 2023-09-27 17:53:29

我在一个visual studio扩展项目中实现了ShowToolWindow()函数,该项目显示单击按钮时的工具窗口。下面的代码可以工作:

private void ShowToolWindow()
{
  IVsUIShell vsUIShell = (IVsUIShell)Package.GetGlobalService(typeof(SVsUIShell));
  IVsWindowFrame frame;
  Guid WindowGuid = new Guid("48d81433-5d5c-4d4c-a174-d8e620c0e0a8");
  vsUIShell.FindToolWindow((uint)__VSFINDTOOLWIN.FTW_fForceCreate, ref WindowGuid, out frame);
  frame.Show();
}
但是,下面的代码不能工作
private void ShowToolWindow1()
{
  this.package = new ToolWindowPackage()/*Package that provides the window*/;
  var window = (MyToolWindow)this.package.FindToolWindow(typeof(MyToolWindow), 0, true); /*This line throws an exception*/
  IVsWindowFrame frame = window.Frame;
  frame.show();
}

在这种情况下,FindToolWindow抛出以下异常

Activated Event Time Duration线程异常抛出:'System. '在Microsoft.VisualStudio.Shell.15.0.dll中出现了一个异常(" service 'Microsoft.VisualStudio.Shell.Interop. dll ')。要使用此功能,必须安装SVsUIShell。确保此服务可用。")。抛出异常:'System. '在Microsoft.VisualStudio.Shell.15.0.dll中出现了一个异常(" service 'Microsoft.VisualStudio.Shell.Interop. dll ')。要使用此功能,必须安装SVsUIShell。

似乎没有调用Package。FindToolWindow,而是ivsuisshell。FindToolWindow。我该如何解决这个问题呢?

我问这个问题是因为我需要得到ToolWindowPane的句柄。因此,即使第一种方法正确显示工具窗口,它也是不够的。这个问题的另一个解决方案,有人能告诉我如何通过第一种方法获得ToolWindowPane的句柄吗?

FindToolWindow Exception

你不应该自己创建一个新的ToolWindowPackage实例。应该使用Visual Studio实例化的现有包实例。