我正在使用 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 提供一个参数,让它将构建日志写入文件,但我正在寻找一种不涉及写入日志文件并且稍后必须删除它的解决方案。
任何建议表示赞赏。谢谢!
<# 编辑 #>
感谢您迄今为止的所有回复!一个流行的建议是直接调用 MsBuild.exe 而不使用 cmd.exe。我需要通过 cmd.exe 的原因是,如果直接从 MsBuild.exe 调用某些项目(例如 XNA 项目),则无法成功构建。相反,我需要从 Visual Studio 命令提示符调用 MsBuild.exe,以便(我假设)设置所有必需的环境变量。我想我可以直接调用 VS 命令提示符,但它也会有与调用 cmd.exe 相同的问题。如果我找不到 VS 命令提示符,我会回退到直接调用 MsBuild.exe,所以仍然感谢这些答案。