似乎.net核心中不存在Debug.Listeners

Wei*_*Wei 6 c# .net-core

看来,Debug.Listeners不净core2.2存在

在.net框架中,我可以使用以下代码:

        Debug.Assert(true);
        Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
        Debug.WriteLine("Debug");
Run Code Online (Sandbox Code Playgroud)

然后在调试时,我可以在控制台中看到调试消息。
但是它不能在网络核心中工作,它将给出错误消息,例如“调试不包含侦听器”。我使用F12搜索(dotnet核心):

public static class Debug
{
    public static int IndentSize { get; set; }
    public static bool AutoFlush { get; set; }
    public static int IndentLevel { get; set; }
    public static void Assert(bool condition);
    public static void Assert(bool condition, string message);
    public static void Assert(bool condition, string message, string detailMessageFormat, params object        public static void Assert(bool condition, string message, string detailMessage);
    public static void Close();
    public static void Fail(string message);
    public static void Fail(string message, string detailMessage);
    public static void Flush();
    public static void Indent();
    public static void Print(string message);
    public static void Print(string format, params object        public static void Unindent();
    public static void Write(string message, string category);
    public static void Write(object value, string category);
    public static void Write(object value);
    public static void Write(string message);
    public static void WriteIf(bool condition, object value);
    public static void WriteIf(bool condition, string message);
    public static void WriteIf(bool condition, string message, string category);
    public static void WriteIf(bool condition, object value, string category);
    public static void WriteLine(object value);
    public static void WriteLine(object value, string category);
    public static void WriteLine(string message);
    public static void WriteLine(string format, params object        public static void WriteLine(string message, string category);
    public static void WriteLineIf(bool condition, object value);
    public static void WriteLineIf(bool condition, object value, string category);
    public static void WriteLineIf(bool condition, string message);
    public static void WriteLineIf(bool condition, string message, string category);
}
Run Code Online (Sandbox Code Playgroud)

我确实找不到它,至少它不是公开的。
如何像以前一样调试应用程序?

官方文档(docs.microsoft.com)说跟踪和调试共享侦听器,但是我的测试结果是:

        TextWriterTraceListener myWriter = new TextWriterTraceListener(Console.Out);
        //Debug.Assert(false);    //Assertion Failed
        Trace.Listeners.Add(myWriter);
        Debug.AutoFlush = true;
        Debug.Indent();
        Trace.WriteLine("Trace");   //write Trace
        Debug.WriteLine("Debug");   //Don't write Debug
        Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

该示例使用Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));,但Debug.Listeners不存在。

Pat*_*vid 9

从 .NET Core 3.0 开始,您可以Trace.Listeners改用。它Debug也会影响并且在功能上是等效的。

  • API 存在,它将与 `Trace.WriteLine` 一起使用,但侦听器不会收到用 `Debug.WriteLine` 打印的消息。 (3认同)

Wei*_*Wei 1

看来我没有办法解决这个问题,但我可以这样调试我的应用程序:

    public static void a()
    {
        Console.WriteLine("always show");
        DebugLog();
    }
    [System.Diagnostics.ConditionalAttribute("DEBUG")]
    static void DebugLog()
    {
        Console.WriteLine("debug show");
    }
Run Code Online (Sandbox Code Playgroud)

只需创建一个新方法,然后添加[System.Diagnostics.ConditionalAttribute("DEBUG")]