エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

VSCodeで.NET Core(CUI)アプリの入力を受け付けたい

f:id:tansantktk:20211023211140p:plain

先日、.NET Coreでコンソールアプリを作る機会がありました。 VSCodeで何も意識せずにF5でデバッグしようとすると、コンソールに出力はされるものの、 Console.Readline()で入力を受け付ける処理で、入力を受け付けてくれずに処理が止まってしまうことに気づきました。

Visual Studioではデフォルトで入力を受け付けてくれますが、VSCodeのデフォルトの挙動ではコンソールへの出力しかされないようです。

対応策

VSCodeで初めてF5でデバッグを開始すると、launch.jsonというデバッグ時の設定を記述するファイルを自動生成してくれます。

このファイルの一部を下記のように修正することで、bash等のターミナルから入力も出来るようになります。

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/net5.0/Smile9DangerDeleter.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            // console, internalConsoleOptionsを記述
            "console": "integratedTerminal",
            "internalConsoleOptions": "openOnFirstSessionStart"
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

あとがき

久々にCUIアプリを.NET Coreで書いてはみましたが、ぶっちゃけNode.jsやPythonの方が記述量が減るので楽だったかなぁと思った次第です…😅

規模の大きいアプリサーバの処理の方が.NET Coreのルールの厳密さは生かせると思いますね。