【问题标题】:What are the exit codes for devenv.com/exe?devenv.com/exe 的退出代码是什么?
【发布时间】:2017-07-26 05:14:54
【问题描述】:
任何命令行应用程序都返回代码作为退出代码,通知主机环境指令的最终状态。 VS 命令行:devenv.com 返回代码数。虽然没有(或我找不到任何)这样的列表或帖子。有文件吗?如果没有,VS 团队的任何人都可以在这里记录吗?
【问题讨论】:
标签:
visual-studio
command-line
exit-code
devenv
return-code
【解决方案1】:
%errorlevel% (cmd.exe) 或 $LASTEXITCODE (Powershell) 成功时将设置为 0,任何其他值都表明 msbuild.exe 或 devenv.exe 失败。
【解决方案2】:
在 Visual Studio 2019 build 16.11.2 中,我发现使用 devenv.exe 执行构建时总是将 ERRORLEVEL 设置为 0,而使用 devenv.com 进行构建时会设置如果构建失败,则 ERRORLEVEL 为正数,如果成功,则为 0。 devenv.com 还会等待构建完成,然后再将控制权返回给 shell。 devenv.com 和 devenv.exe 都支持 /Out 参数以显式指定日志文件。此外,devenv.com 会生成控制台输出,如果不需要,可以将其重定向到 nul。
因此,通过 Windows 批处理文件运行构建,您可以运行 devenv.com,然后立即检查失败:
"C:\path\to\devenv.com" "my-solution.sln" /Rebuild "Release|x64" /Out "my-solution-build.log" > nul
if ERRORLEVEL 1 echo Error %ERRORLEVEL% building my-solution.sln & goto my-failed-build-label
echo Build succeeded
. . .
在上面的示例中,如果 ERRORLEVEL 设置为 1 或更高,则测试 if ERRORLEVEL 1 将为真。
每个项目内的构建后事件都可能遇到错误情况并设置ERRORLEVEL,例如:
rem This is in a post-build event for a project
if not exist "path-to-expected-build-output.exe" exit /b 3
当 devenv.com 退出时,这些构建后的 ERRORLEVEL 可能会被吞并并转换为 ERRORLEVEL,例如 1。