Debug.WriteLine отображается только в окне вывода, а не в окне консоли - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь выяснить, что записывается в консоли, когда не выполняется отладка, поэтому, например, при запуске в выпуске она не будет отображаться.Поэтому для этого я использую этот метод для ведения журнала, который не должен отображаться

    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 ]

1 голос
/ 17 апреля 2019

Стив Уэй, вероятно, будет работать для большинства, но если вы используете .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 в метод

1 голос
/ 17 апреля 2019

Объяснено в Документах 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);

Другой вариант - использовать директиву 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);
    }
}
...