为什么ConsoleTraceListener没有写入控制台?

时间:2009-06-11 18:12:58

标签: .net

我经常遇到.NET框架中的项目,这些项目很少或没有关于如何使用这些功能的代码示例。在其他场合,有很多例子,但似乎没有一个像规定的那样工作。

例证:System.Diagnostics.ConsoleTraceListener类。

从我读过的所有内容和我见过的每个代码示例,当我做的事情如下:

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

...我应该看到一个控制台窗口弹出“Yo”。然而,不是那个预期的输出,而是将“Yo”写入Visual Studio输出,在那里可以看到正常的跟踪/调试消息。

我尝试过每次尝试使用Google搜索的示例,包括相应侦听器的配置文件设置,将侦听器添加到Trace.Listeners集合,自定义ConsoleTraceListener类型等等。我甚至只编译到发行版版本并运行可执行文件(绝对没有任何作用)。

我错过了什么?

2 个答案:

答案 0 :(得分:6)

回答你对Orion Adrian的回答的评论......

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定义编译,您可以简单地登录到控制台。就个人而言,我更喜欢使用log4net之类的“oomph”进行日志记录,但跟踪是一个良好的开端。

答案 1 :(得分:3)

即使按照上面的建议定义了TRACE,只有在使用/target:exe创建可执行文件时,才会显示控制台跟踪信息。即作为控制台可执行如果它是使用/target:winexe创建的,则没有可用的控制台,因此ConsoleTraceListener没有跟踪输出。