WPF アプリでもコンソールにログしたい
◆ コンソールから起動した場合に コンソールに出力したいなら Win32API の AttachConsole
◆ コンソールアプリに種類を変えると絶対にコンソールウィンドウが表示される
◆ コンソールアプリに種類を変えると絶対にコンソールウィンドウが表示される
タイトル通り WPF でもコンソールにデバッグ情報を表示したいときがあります
Debug 実行していればちゃんとログされるのですが (Assembly 読み込みましたとか 全例外の表示とかと一緒でみづらいですけど) Release ビルドで試していたときには表示されません
コマンドラインから起動したときは そこにログしてくれてもいいのですけどされないです
VisualStudio だとプロジェクトのプロパティでアプリケーションタブの出力の種類です
ここが 「Windows アプリケーション」 になってるので 「コンソールアプリケーション」 にします
これで Console.WriteLine のログがコンソールにでます
ただ ダブルクリックでの起動でもコンソールが表示されます
通常時は邪魔です
かといって コンソールを×ボタンで閉じるとアプリケーションが終了してしまいます
いらないときはウィンドウを閉じず非表示にするにしても一瞬でてくるのはイヤです
この方法は絶対にコンソールが出てほしいとき用です
そうすると Console 系メソッドの出力が起動元コンソールに出力されます
こんな partial class を書くだけで おっけいです
App の static でやらないといけないことはないですが 最初に絶対やるならとりあえずここでいいかなということでここにしてます
partial class をコピペするだけで済みますし
static App を別の理由ですでに定義してるならそこにいれるといいです
続く
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);
}
}
{
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);
static App()
{
AttachConsole(-1);
}
}
App の static でやらないといけないことはないですが 最初に絶対やるならとりあえずここでいいかなということでここにしてます
partial class をコピペするだけで済みますし
static App を別の理由ですでに定義してるならそこにいれるといいです
続く