PowerShell v3.0 を使用して新しい cmd.exe プロセスを開始します。次に、Visual Studio コマンド プロンプトをロードしてビルドを実行します。
Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuildInVsCommandPrompt -WindowStyle $windowStyle -Wait
これは機能し、新しいコマンド プロンプト ウィンドウが開き、ビルドが行われていることがわかります。ビルドが完了すると、コマンド プロンプト ウィンドウが閉じます。ビルドが成功したかどうかを調べるために、コマンド プロンプト ウィンドウに書き込まれたテキストを取得して変数に格納できるようにしたいと考えています。これを使ってみましたが、うまくいきません。$buildOutput 変数が空です:
Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuildInVsCommandPrompt -WindowStyle $windowStyle -Wait -OutVariable buildOutput
Write-Host "Build output = $buildOutput"
cmd.exe プロセスはテキストを返さないため、これは理にかなっています。独自のウィンドウに書き込むだけです。元の PowerShell スクリプトが使用する変数にそのテキストを格納できる方法はありますか? MsBuild にパラメーターを指定してビルド ログをファイルに書き込むことができることはわかっていますが、ログ ファイルへの書き込みと後で削除する必要がないソリューションを探しています。
任意の提案をいただければ幸いです。ありがとう!
<# 編集 #>
これまでのすべての応答に感謝します! よくある提案は、cmd.exe を使用せずに MsBuild.exe を直接呼び出すことです。cmd.exe を使用する必要があるのは、MsBuild.exe から直接呼び出すと一部のプロジェクトが正常にビルドされないためです (XNA プロジェクトなど)。代わりに、Visual Studio のコマンド プロンプトから MsBuild.exe を呼び出す必要があります。これにより、必要な環境変数がすべて設定されると思います。VS コマンド プロンプトを直接呼び出すこともできると思いますが、cmd.exe を呼び出すのと同じ問題が発生します。VS コマンド プロンプトが見つからない場合は、フォールバックして MsBuild.exe を直接呼び出すので、これらの回答は引き続き高く評価されます。