No output to console from a WPF application? No output to console from a WPF application? wpf wpf

No output to console from a WPF application?


You can use

Trace.WriteLine("text");

This will output to the "Output" window in Visual Studio (when debugging).

make sure to have the Diagnostics assembly included:

using System.Diagnostics;


Right click on the project, "Properties", "Application" tab, change "Output Type" to "Console Application", and then it will also have a console.


You'll have to create a Console window manually before you actually call any Console.Write methods. That will init the Console to work properly without changing the project type (which for WPF application won't work).

Here's a complete source code example, of how a ConsoleManager class might look like, and how it can be used to enable/disable the Console, independently of the project type.

With the following class, you just need to write ConsoleManager.Show() somewhere before any call to Console.Write...

[SuppressUnmanagedCodeSecurity]public static class ConsoleManager{    private const string Kernel32_DllName = "kernel32.dll";    [DllImport(Kernel32_DllName)]    private static extern bool AllocConsole();    [DllImport(Kernel32_DllName)]    private static extern bool FreeConsole();    [DllImport(Kernel32_DllName)]    private static extern IntPtr GetConsoleWindow();    [DllImport(Kernel32_DllName)]    private static extern int GetConsoleOutputCP();    public static bool HasConsole    {        get { return GetConsoleWindow() != IntPtr.Zero; }    }    /// <summary>    /// Creates a new console instance if the process is not attached to a console already.    /// </summary>    public static void Show()    {        //#if DEBUG        if (!HasConsole)        {            AllocConsole();            InvalidateOutAndError();        }        //#endif    }    /// <summary>    /// If the process has a console attached to it, it will be detached and no longer visible. Writing to the System.Console is still possible, but no output will be shown.    /// </summary>    public static void Hide()    {        //#if DEBUG        if (HasConsole)        {            SetOutAndErrorNull();            FreeConsole();        }        //#endif    }    public static void Toggle()    {        if (HasConsole)        {            Hide();        }        else        {            Show();        }    }    static void InvalidateOutAndError()    {        Type type = typeof(System.Console);        System.Reflection.FieldInfo _out = type.GetField("_out",            System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);        System.Reflection.FieldInfo _error = type.GetField("_error",            System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);        System.Reflection.MethodInfo _InitializeStdOutError = type.GetMethod("InitializeStdOutError",            System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);        Debug.Assert(_out != null);        Debug.Assert(_error != null);        Debug.Assert(_InitializeStdOutError != null);        _out.SetValue(null, null);        _error.SetValue(null, null);        _InitializeStdOutError.Invoke(null, new object[] { true });    }    static void SetOutAndErrorNull()    {        Console.SetOut(TextWriter.Null);        Console.SetError(TextWriter.Null);    }}