2009-06-11 109 views
3

很多時候我遇到了.NET框架中的項目,這些項目幾乎沒有或者沒有關於如何使用這些功能的代碼示例。在其他場合,有很多例子,但他們似乎沒有按照規定工作。ConsoleTraceListener爲什麼不寫入控制檯?

案例:System.Diagnostics.ConsoleTraceListener類。

一切從我讀過,我見過的每一個代碼示例,當我在做類似如下:

ConsoleTraceListner listener = new ConsoleTraceListener(); 
listener.WriteLine("Yo"); 

...我應該可以看到一個控制檯窗口彈出與「呦」。但是,不是那個預期的輸出,而是在Visual Studio輸出中寫入「Yo」,其中會看到正常的Trace/Debug消息。

我試着每次迭代我已搜索的例子包括適當的監聽器的配置文件設置,將監聽器添加到Trace.Listeners集合,自定義ConsoleTraceListener類型等我甚至只是編譯爲發佈版本並運行可執行文件(完全沒有任何問題)。

我錯過了什麼?

回答

6

回答獵戶座阿德里安的回答您的評論...

一個ConsoleTraceListenter的點的任何TraceListener不是直接調用它 - 這是將其添加到跟蹤偵聽集合,使其餘的您的代碼只是必須調用Trace.Write等。例如:

using System; 
using System.Diagnostics; 

class Test 
{ 
    static void Main() 
    { 
     ConsoleTraceListener listener = new ConsoleTraceListener(); 
     Trace.Listeners.Add(listener); 

     DoSomething(); 

     Trace.Flush(); 
    } 

    static void DoSomething() 
    { 
     DoSomethingElse(); 
    } 

    static void DoSomethingElse() 
    { 
     // We don't want to have to pass all our logging 
     // baggage down this far 
     Trace.WriteLine("In DoSomethingElse"); 
    } 
} 

編譯與TRACE定義,並且你已經有了簡單的日誌記錄到控制檯。就我個人而言,我更喜歡使用更多的「oomph」,如log4net,但追蹤是一個好的開始。

+1

同樣在上面的情況下,您可以擁有多個Trace偵聽器,一個用於ConsoleTraceListener,另一個用於EventLogTraceListener。 – eschneider 2009-06-11 18:46:55

+0

@Jon,thanx多爲您的輸入。但是我寫了幾乎逐字寫下的內容。我的評論如上所述:「我嘗試了每次迭代我已谷歌搜索的示例,包括......將偵聽器添加到Trace.Listeners集合中......」。但它仍然不按我期待的方式工作。我還沒有找到合適的組合來實際渲染帶有文本的控制檯。 – Boydski 2009-06-12 14:16:35

2

即使按照以上建議定義的TRACE,控制檯跟蹤信息將僅在可執行文件是使用/target:exe(即,即作爲控制檯執行。如果它是使用/target:winexe創建的,則不會有控制檯可用,因此ConsoleTraceListener的跟蹤輸出不可用。