C#のビルド&実行をバッチファイル化したら途中で止まる問題[Mono]
C#実行環境
- OS: windows 10 home
- コンパイラ、動作環境: Mono
- エディタ: Visual studio code
概要
競プロ用に、Visual studio codeにC#(mono)のビルド環境を作成した。
ビルドと実行をコマンドで入力するのが面倒なので、処理をまとめてバッチファイル化してみた。
csc -out:out.exe test.cs
mono out.exe
が、上記の場合1行目のビルドのみが実行され、2行目以降の処理が実行されなかった。
原因と解決法
ビルド時の実行されるcscコマンドの実体を見てみると、どうやらこれもbatファイル。
バッチファイルの中で別のバッチファイル(子バッチ)をそのまま呼び出した場合、子バッチ実行後に終了してしまう。
そのため、実体がbatファイルであるcscコマンドをそのまま実行した場合、それ以後の処理が行われなかった。
子バッチファイルを呼び出す場合は、「call 子バッチファイル」のように記載する必要がある。
よって下記のように修正すればよい。
call csc -out:out.exe test.cs
mono out.exe
余談(VScodeのRunnerと連携するために)
上記の話も踏まえて、私が実際に使用しているbatファイルを置いておきます。
Visual studio codeの拡張機能Runnerを入れると、
特定の言語に対して特定のファイルを実行してくれるショートカットキー(Ctrl+B)が使用できる。
Runnerと連携時に実行されるbatファイルを下記のように設定してます。
call csc -out:out.exe %~dpnx1
start /w cmd /c "mono out.exe & pause"
del out.exe
解説
1行目: runnerで呼び出されるバッチはファイル名が第一引数となるので、%1でファイル名を受け取る。
2行目: プログラム実行後に標準入力を受け取るためには、新たにwindowを開く必要があるため、
startコマンドにより新たにwindowを開いている。その後、monoコマンドで実行を行う。
3行目: 実行後は実行ファイルを削除、2行目で/wオプションがあるので、2行目の実行後に削除が行われる。
Author And Source
この問題について(C#のビルド&実行をバッチファイル化したら途中で止まる問題[Mono]), 我々は、より多くの情報をここで見つけました https://qiita.com/EngTks/items/377f0c9c1f13a8864513著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .