我想用我的Debug.WriteLine()
語句讓我的Console.WriteLine()
命令出現在我的「輸出」窗口中。我想我想出瞭如何做到這一點,但我不記得/找到谷歌如何做到這一點。 我似乎記得能夠做到這一點的app.config
將控制檯重定向到Visual Studio在app.config中的調試輸出窗口
我找到很多關於如何投注控制檯和調試語句出現在控制檯的輸出指令,但不知道如何讓他們出現在「輸出「窗口。
有誰知道嗎?
我想用我的Debug.WriteLine()
語句讓我的Console.WriteLine()
命令出現在我的「輸出」窗口中。我想我想出瞭如何做到這一點,但我不記得/找到谷歌如何做到這一點。 我似乎記得能夠做到這一點的app.config
將控制檯重定向到Visual Studio在app.config中的調試輸出窗口
我找到很多關於如何投注控制檯和調試語句出現在控制檯的輸出指令,但不知道如何讓他們出現在「輸出「窗口。
有誰知道嗎?
基本上最簡單的解決方案是這樣的。
public class ToDebugWriter : StringWriter
{
public override void WriteLine(string value)
{
Debug.WriteLine(value);
base.WriteLine(value);
}
}
,你必須添加到程序的初始化這條線 「Console.SetOut(新ToDebugWriter());」
如果您可以獲得輸出窗口的流,您可以使用Console.SetOut()重定向到它。然而這種方法似乎不可能。
System.Debug在其TraceListenerCollection中輸出到每個TraceListener。最初只有一個TraceListener註冊,它是DefaultTraceListener。它不使用流對象,而是使用本地方法輸出。
使用Visual Studio API的一種方法可能是一種可行的方法。
@Avram's answer已經爲我工作,除了他的代碼中的單個超載不是log4net的ConsoleAppender
在我的系統上使用的那個。 (我感興趣的Console.SetOut
,這樣的log4net的ConsoleAppender
輸出到Visual Studio的「調試」輸出窗格。)所以我推翻所有的StringWriter
的Write
和WriteLine
方法接受string
,object
,char[]
等的假設,一個或多個這些是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);
}
}
}
很好的答案。謝謝! – 2009-11-12 06:00:51
該死!我終於可以在Visual Studio上查看我的NHibernate查詢了! – 2010-04-16 03:04:36
謝謝!爲什麼要打電話給'base.WriteLine'? – 2012-09-15 14:35:09