コンソールアプリケーションであれば何も考えなくてもコンソールに出力できますが、Windows デスクトップアプリケーションの場合はコンソールを作成する必要があります。
環境
- Visual Studio 2017
- .NET Framework 4.6.2
コマンドプロンプトからアプリケーションを起動した場合
この場合は親のコンソールにアタッチします。
以下の記事を参考にしてください。
GUI からアプリケーションを起動した場合
exe ファイルをダブルクリックするなどしてアプリケーションを起動した場合は親のコンソールがないため、コンソールを作成する必要があります。
以下コード例です。
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
static extern bool AttachConsole(int processId);
const int ATTACH_PARENT_PROCESS = -1;
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
static extern bool AllocConsole();
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
static extern bool FreeConsole();
[STAThread]
public static void Main(string[] args)
{
var attachConsole = AttachConsole(ATTACH_PARENT_PROCESS);
if (attachConsole == false)
{
// 親のコンソールがないので作成する
if (AllocConsole() == false)
{
return;
}
// 標準出力のストリームを取得
var stream = Console.OpenStandardOutput();
var stdout = new StreamWriter(stream)
{
// Write メソッド実行時に即出力するためには AutoFlush プロパティを True にする必要があるらしい
AutoFlush = true,
};
// 出力先を標準出力に設定
Console.SetOut(stdout);
}
Console.WriteLine("Hello World.");
if (attachConsole == false)
{
// コンソールの解放
FreeConsole();
}
}