Console.ReadKey が使えない
よくC#のサンプルなんかで実行結果表示後にすぐ閉じないように Console.ReadKey を置いたりしている。
VSCode でそのまま書いてデバッグモードで動かすと例外が出るので、どうにかならないかと調べてみた。
例外の再現
準備
VSCode を立ち上げて適当なフォルダ( ReadTest フォルダ)を作り選択。
VSCode のコンソールで
dotnet new console
と入力してコンソールアプリケーションの基本を作る。
使うサンプルコードはこんな感じ
using System; namespace ReadTest { class Program { static void Main(string[] args) { Console.WriteLine("Push any key."); Console.ReadKey(); } } }
Push any key と表示した後にキー入力待ちをする、よくあるやつ。
デバッグ実行
F5 でデバッグを開始するとすぐに Console.ReadKey で例外が発生する。
例外が発生しました: CLR/System.InvalidOperationException 型 'System.InvalidOperationException' のハンドルされていない例外が System.Console.dll で発生しました: 'Cannot read keys when either application does not have a console or when console input has been redirected. Try Console.Read.'
解決方法
.vscode フォルダ内に launch.json というファイルがあるので開く。
console の項目が internalConsole になっているのでexternalTerminal、もしくは integratedTerminal に変える。
externalTerminal の場合はコンソール画面が開いて入力待ちになる。
integratedTerminal の場合は VSCode 内のターミナルウィンドウで入力待ちになっている。