devenv.com/exe 的退出代码是什么?

5
任何命令行应用程序都会返回退出代码作为最终指令的状态通知给主机环境。VS命令行工具:devenv.com返回数字代码。尽管没有(或者我找不到)关于此的列表或文章。是否有任何文档?如果没有,是否有VS团队成员可以在此处记录此信息?

{btsdaf} - JosefZ
2个回答

2

%errorlevel%(cmd.exe)或$LASTEXITCODE(Powershell)在成功时将被设置为0,任何其他值都表示对于msbuild.exedevenv.exe的失败。


唉,我希望有像样的文档来解决这个问题。我们的构建实际上输出了所有构建成功,0 失败,但 devenv.com 返回 1。肯定有一种方法可以找到 devenv.com 抛出错误的原因吧? - Shiv

2
在Visual Studio 2019版本16.11.2中,我发现使用devenv.exe进行构建时,ERRORLEVEL总是被设置为0,而使用devenv.com进行构建则会在构建失败时将ERRORLEVEL设置为正数,成功时设置为0。此外,devenv.com会等待构建完成后才将控制权返回给shell。两者都支持使用/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 将返回 true。
每个项目中的后构建事件可能会遇到错误条件并设置一个 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 可能会被吞噬并转换为诸如 1 的 ERRORLEVEL。

在vs2022及更早版本的devenv.com中,成功时我们会得到错误代码0。1(非零)通常是一个错误代码而不是成功代码。 - Shiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接