2009-09-10 124 views
10

我想用我的Debug.WriteLine()語句讓我的Console.WriteLine()命令出現在我的「輸出」窗口中。我想我想出瞭如何做到這一點,但我不記得/找到谷歌如何做到這一點。 我似乎記得能夠做到這一點的app.config將控制檯重定向到Visual Studio在app.config中的調試輸出窗口

我找到很多關於如何投注控制檯和調試語句出現在控制檯的輸出指令,但不知道如何讓他們出現在「輸出「窗口。

有誰知道嗎?

回答

18

基本上最簡單的解決方案是這樣的。

public class ToDebugWriter : StringWriter 
    { 
     public override void WriteLine(string value) 
     { 
      Debug.WriteLine(value); 
      base.WriteLine(value); 
     } 
    } 

,你必須添加到程序的初始化這條線 「Console.SetOut(新ToDebugWriter());」

+0

很好的答案。謝謝! – 2009-11-12 06:00:51

+1

該死!我終於可以在Visual Studio上查看我的NHibernate查詢了! – 2010-04-16 03:04:36

+0

謝謝!爲什麼要打電話給'base.WriteLine'? – 2012-09-15 14:35:09

3

@Avram's answer已經爲我工作,除了他的代碼中的單個超載不是log4net的ConsoleAppender在我的系統上使用的那個。 (我感興趣的Console.SetOut,這樣的log4net的ConsoleAppender輸出到Visual Studio的「調試」輸出窗格。)所以我推翻所有的StringWriterWriteWriteLine方法接受stringobjectchar[]等的假設,一個或多個這些是ConsoleAppender通過Console撥打的電話號碼。

成功,log4net記錄現在出現在我的「調試」窗格中。

我將下面的代碼包含在任何有類似目標的人的好處中。 (爲了完全安全,可以覆蓋其餘的StringWriter.Write.WriteLine方法。)我刪除了對base的調用,因爲它們看起來沒有必要,我認爲它們只是在StringWriter內建立了一個大緩衝區(通常通過該類的.ToString()。)

namespace GeneralLibrary.Logging 
{ 
    using System.Diagnostics; 
    using System.IO; 

    public class DebugWriter : StringWriter 
    { 
     public override void Write(string format, object arg0) 
     { 
      Debug.Write(string.Format(format, arg0)); 
     } 

     public override void Write(string format, object arg0, object arg1) 
     { 
      Debug.Write(string.Format(format, arg0, arg1)); 
     } 

     public override void Write(string format, object arg0, object arg1, object arg2) 
     { 
      Debug.Write(string.Format(format, arg0, arg1, arg2)); 
     } 

     public override void Write(string format, params object[] arg) 
     { 
      Debug.Write(string.Format(format, arg)); 
     } 

     public override void Write(object value) 
     { 
      Debug.Write(value); 
     } 

     public override void Write(string value) 
     { 
      Debug.Write(value); 
     } 

     public override void Write(char[] buffer) 
     { 
      Debug.Write(buffer); 
     } 

     public override void Write(char[] buffer, int index, int count) 
     { 
      Debug.Write(new string(buffer, index, count)); 
     } 

     public override void WriteLine(string value) 
     { 
      Debug.WriteLine(value); 
     } 

     public override void WriteLine(object value) 
     { 
      Debug.WriteLine(value); 
     } 

     public override void WriteLine(string format, object arg0) 
     { 
      Debug.WriteLine(format, arg0); 
     } 

     public override void WriteLine(string format, object arg0, object arg1) 
     { 
      Debug.WriteLine(format, arg0, arg1); 
     } 

     public override void WriteLine(string format, object arg0, object arg1, object arg2) 
     { 
      Debug.WriteLine(format, arg0, arg1, arg2); 
     } 

     public override void WriteLine(string format, params object[] arg) 
     { 
      Debug.WriteLine(format, arg); 
     } 

     public override void WriteLine(char[] buffer) 
     { 
      Debug.WriteLine(buffer); 
     } 

     public override void WriteLine(char[] buffer, int index, int count) 
     { 
      Debug.WriteLine(new string(buffer, index, count)); 
     } 

     public override void WriteLine() 
     { 
      Debug.WriteLine(string.Empty); 
     } 
    } 
} 
相關問題