Debug.WriteLine仅显示在“输出”窗口中,而不显示在“控制台”窗口中

时间:2019-04-17 08:17:56

标签: visual-studio debugging console console.writeline

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

    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运行应用程序,因此它在控制台窗口中运行,但在调试时运行Debug.WritLine仅打印到vs输出窗口中,而没有显示在控制台窗口中。有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

Microsoft文档中的TraceListeners集合主题对此进行了解释

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

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

或仅使用ConsoleTraceListener。

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

另一种选择是使用编译指示来克服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);
    }
}

答案 1 :(得分:0)

史蒂夫方式可能适用于大多数情况,但是如果您使用.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属性放在方法上