如何在Visual Studio 2010 AddIn中写入输出窗口?

时间:2011-10-14 21:42:26

标签: visual-studio-2010 add-in visual-studio-addins

我正在编写一个简单的Visual Studio 2010加载项,以便在工作中执行常见的复制工作(从libs sln获取dll)。

我希望将复制的进度写入输出窗口。

我尝试Trace.WriteLine(...)期望这样做,但是当我在调试器中运行加载项时却没有。我还没有尝试过任何其他方式。

我在Visual Studio 2008中找到了一些这样做的示例,但是无法引用所需的库。

有人能指出我如何写入输出窗口?我的谷歌搜索技能让我失望。

3 个答案:

答案 0 :(得分:16)

我为我编写的宏做了这个:

Window window = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
OutputWindow outputWindow = (OutputWindow) window.Object;
outputWindow.ActivePane.Activate();
outputWindow.ActivePane.OutputString(message);

以下是DTE界面的链接: http://msdn.microsoft.com/en-us/library/envdte.dte(v=VS.100).aspx

答案 1 :(得分:8)

正如罗伯特所指出的,当没有ActivePane时,John的代码将抛出异常。如果有活动窗格,它将使用任何活动窗格。

我在罗伯特的例子中遇到的一个问题取决于你创建窗格的位置,在我的例子中是Exec方法,它将在每次运行时创建多个具有相同名称的窗格。

包括我如何解决这个问题的例子。非常简单,只需检查窗口是否存在......

      Window           window           = _applicationObject.Windows.Item( EnvDTE.Constants.vsWindowKindOutput );
      OutputWindow     outputWindow     = ( OutputWindow )window.Object;
      OutputWindowPane outputWindowPane = null;

      for ( uint i = 1; i <= outputWindow.OutputWindowPanes.Count; i++ )
      {
        if ( outputWindow.OutputWindowPanes.Item( i ).Name.Equals( OUTPUT_WINDOW_NAME , StringComparison.CurrentCultureIgnoreCase ) )
        {
          outputWindowPane = outputWindow.OutputWindowPanes.Item( i );
          break;
        }
      }

      if ( outputWindowPane == null )
        outputWindowPane = outputWindow.OutputWindowPanes.Add( OUTPUT_WINDOW_NAME );

      outputWindowPane.OutputString( "Message" );

答案 2 :(得分:1)

我正在编写Visual Studio加载项并遇到同样的问题,但是在尝试上述答案时我发现了这一行:

outputWindow.ActivePane.Activate();

发了错误。

  

NullReferenceException - 未将对象引用设置为对象的实例。

但是我现在发现了解决问题的方法略有不同:

Window window = applicationObject.Windows.Item(Constants.vsWindowKindOutput);
OutputWindow outputWindow = (OutputWindow)window.Object;
OutputWindowPane owp;
owp = outputWindow.OutputWindowPanes.Add("new pane");
owp.OutputString("hello");