【问题标题】:What are the exit codes for devenv.com/exe?devenv.com/exe 的退出代码是什么?
【发布时间】:2017-07-26 05:14:54
【问题描述】:

任何命令行应用程序都返回代码作为退出代码,通知主机环境指令的最终状态。 VS 命令行:devenv.com 返回代码数。虽然没有(或我找不到任何)这样的列表或帖子。有文件吗?如果没有,VS 团队的任何人都可以在这里记录吗?

【问题讨论】:

  • devenv 确实在解决方案中的任何项目无法编译时将errorlevel 设置为非零;它可能取决于devenv 命令行提供的参数和开关。请edit 您的问题并提供典型的devenv 命令行和失败输出的minimal reproducible example

标签: visual-studio command-line exit-code devenv return-code


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在 Visual Studio 2019 build 16.11.2 中,我发现使用 devenv.exe 执行构建时总是将 ERRORLEVEL 设置为 0,而使用 devenv.com 进行构建时会设置如果构建失败,则 ERRORLEVEL 为正数,如果成功,则为 0。 devenv.com 还会等待构建完成,然后再将控制权返回给 shell。 devenv.comdevenv.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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多