cmd msbuild errorlevel始终为0

Vla*_*nko 9 msbuild cmd errorlevel

我在build.bat文件中有这个代码

for /R %~dp0 %%A In (*.sln) do (
c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe %%A /t:rebuild /nologo /verbosity:minimal /flp:Verbosity=detailed;LogFile=%~dp0\Logs.txt;append=true /m /p:Configuration=Debug;Platform="Any CPU" /p:VisualStudioVersion="12.0"
if not %errorlevel%==0 set Failed+=1
pause)
Run Code Online (Sandbox Code Playgroud)

我的问题是%errorlevel%总是0,即使日志文件有错误和警告.

Vla*_*nko 6

JozefZ的评论帮助了我:

使用SETLOCAL EnableDelayedExpansion和!errorlevel!而不是%errorlevel%或(更好)返回If ErrorLevel 1语法.设置EnabledDelayedExpansion将导致每个变量在执行时而不是在解析时扩展:解析时,命令解释器评估变量line-by_line和/或command_by_command但是()括号中的所有代码块都认为是一个命令.另一方面,如果应该读取ErrorLevel 1,就好像ErrorLevel大于或等于1,因此不等于0


Kim*_*Kim 5

我花了一些时间来解决这个问题,但这对我有用:

msbuild mySolution.sln
if errorlevel 1 exit /b errorlevel
Run Code Online (Sandbox Code Playgroud)

我不需要使用SETLOCAL EnableDelayedExpansion