◆ コンソールから起動した場合に コンソールに出力したいなら Win32API の AttachConsole
◆ コンソールアプリに種類を変えると絶対にコンソールウィンドウが表示される 

タイトル通り WPF でもコンソールにデバッグ情報を表示したいときがあります
Debug 実行していればちゃんとログされるのですが (Assembly 読み込みましたとか 全例外の表示とかと一緒でみづらいですけど) Release ビルドで試していたときには表示されません

コマンドラインから起動したときは そこにログしてくれてもいいのですけどされないです

Console アプリとして扱う

OutputType を Exe にしてコンソールアプリとして扱うことができます
VisualStudio だとプロジェクトのプロパティでアプリケーションタブの出力の種類です
ここが 「Windows アプリケーション」 になってるので 「コンソールアプリケーション」 にします

これで Console.WriteLine のログがコンソールにでます

ただ ダブルクリックでの起動でもコンソールが表示されます

通常時は邪魔です
かといって コンソールを×ボタンで閉じるとアプリケーションが終了してしまいます
いらないときはウィンドウを閉じず非表示にするにしても一瞬でてくるのはイヤです

この方法は絶対にコンソールが出てほしいとき用です

AttachConsole

Win32API の API を使って起動元のコンソールをアタッチすることができるようです
そうすると Console 系メソッドの出力が起動元コンソールに出力されます

こんな partial class を書くだけで おっけいです
public partial class App : Application
{
    [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
    public static extern bool AttachConsole(int processId);

    static App()
    {
        AttachConsole(-1);
    }
}

App の static でやらないといけないことはないですが 最初に絶対やるならとりあえずここでいいかなということでここにしてます
partial class をコピペするだけで済みますし
static App を別の理由ですでに定義してるならそこにいれるといいです


続く