複数のディレクトリ(すべて拡張子.sln)に多数のVisual Studioプロジェクトソリューションがあり、バッチファイルにリストされているすべてのソリューションを自動的にビルドする簡単なバッチスクリプトを作成したいと思います。
Visual Studio Command Prompt
(次のコマンドが実行された単なるコマンドラインインスタンス)を起動することで、手動でソリューションを構築できます。
"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
その後、次のように呼び出してプロジェクトをビルドします。
devenv "path\to\solutionFile\projectSolution1.sln" /build Debug
これによりプロジェクトがビルドされ(プロジェクトにエラーがないと仮定)、ビルドするプロジェクトごとにすすぎ、繰り返します。
ただしbuild.bat
というバッチファイルに次のものがある場合:
"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
echo "Starting Build for all Projects with proposed changes"
echo .
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug
echo "All builds completed."
pause
バッチスクリプトは最初の行のみを実行します、exit
を入力するまで待ってから他の行を実行します。バッチファイルとすべてのStackOverflowの質問に基づいてこれを理解したのは、cmd
が実際にvcvarsall.bat
を実行する別のインスタンスを呼び出してビルド環境をセットアップすることです。
exit
と入力すると、devenv
が設定されたインスタンスが強制終了され、その後のコマンドはdevenv
が認識されたコマンドではないため、実行できません(エクスポートされたパスは認識されないため)。もう存在します)
要するに、これを単一のバッチファイルでどのように達成できますか(残りのコマンドをdevenv
が定義されたcmdインスタンスに渡す)?これはビルドを呼び出すための堅牢な方法ではないことを理解しています(そしてこれを行うツールはたくさんあります)が、これらのプロジェクトを個別に呼び出す手動作業を自動化する1つのバッチスクリプトが欲しいだけです。
Jimmyが指摘したように、解決策が見つかりました。CMD.exeへのショートカットであるため、環境変数%comspec%
を削除する必要があります。
ただし、"%comspec" /k
を削除するだけで、CMDインスタンスが開き、1秒後に終了します。以前、%comspec%
と一緒に使用すると別のCMDインスタンスを作成するcall
関数を試しました。
解決策は最初の行の前にcall
を追加し、%comspec
を削除します
これが、意図したとおりに機能するようになった最終的なバッチファイルです。
@echo OFF
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
echo "Starting Build for all Projects with proposed changes"
echo .
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug
echo .
echo "All builds completed."
pause
@echo OFF
は、コマンド(その呼び出しコマンドなど)を端末にエコーアウトしないようにバッチスクリプトに指示することに注意してください(ただし、エラーと警告は引き続き表示されます)
これがすでにバッチスクリプトにある場合は、次の行を参照してください。
"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
おそらく"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
である必要があります
どうして? %comspec%
はcmd.exeへの環境変数のショートカットであるため、ご覧のとおり、/ kオプションを指定してcmdの新しいインスタンスを起動します(cmd /?
を実行するとCarries out the command specified by string but remains
と表示されます) )。あなたはそれが残っていることを気にしません、あなたがすでにあなたのバッチファイルを実行しているときあなたは新しいcmd.exeさえ欲しくないです。