Debug.WriteLine 仅出现在输出 window 中,而不出现在控制台 window 中

Debug.WriteLine shows up only in Output window and not Console window

我试图在不调试时清除在控制台中写入的内容,因此例如 运行ning 在发布时它不会显示。因此,为此我将此方法用于不应显示的日志记录

    public static void DebugWriteConsole(string s)
    {
        Debug.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
        if (Log.logger != null)
        {
            Log.Info(s);
        }
    }

它在这方面起作用,它在 运行 发布时不会出现,但我遇到的问题是我 运行 应用程序 -c 所以它运行s 在控制台 window 但是当 运行 在调试中 Debug.WritLine 只打印到 vs 输出 window 而控制台中没有任何内容 window.有人知道如何解决这个问题吗?

已在 TraceListeners 集合主题中的 Microsoft 文档中进行了说明

您可以使用 TextWriterTraceListener 并将 System.Console.Out 指定为要写入的流(或任何其他合适的流实例)

TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(myWriter);

或者只使用 ConsoleTraceListener。

ConsoleTraceListener trc = new ConsoleTraceListener();
Debug.Listeners.Add(trc);

另一种选择是使用 pragma 指令来克服 NET Core 问题

public static void DebugWriteConsole(string s)
{
    #if DEBUG
        Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
    #endif
    Debug.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
    if (Log.logger != null)
    {
        Log.Info(s);
    }
}

Steve 方法可能适用于大多数人,但如果您使用 .Net Core 并遇到此问题,我找到了这样的解决方案,因为 .Net Core 没有 Debug.Listeners 方法来执行此操作就是这样写方法

[Conditional("DEBUG")]
    public static void DebugWriteConsole(string s)
    {
        Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
        if (Log.logger != null)
        {
            Log.Info(s);
        }
    }

仍在使用 Console.WriteLine 但将 Conditional 属性放在方法上