Não importa como tentei, o nível de erro sempre permanece 0, mesmo quando o msbuild falha. Então, eu criei minha solução alternativa:
Build Project e salve o log no Build.log
SET Build_Opt=/flp:summary;logfile=Build.log;append=true
msbuild "myproj.csproj" /t:rebuild /p:Configuration=release /fl %Build_Opt%
procure a string "0 Error" no log de construção, defina o resultado como var
FOR /F "tokens=* USEBACKQ" %%F IN (`find /c /i "0 Error" Build.log`) DO (
SET var=%%F
)
echo %var%
obtém o último caractere, que indica quantas linhas contém a string de pesquisa
set result=%var:~-1%
echo "%result%"
se a sequência não for encontrada, erro> 0, falha na compilação
if "%result%"=="0" ( echo "build failed" )
Essa solução foi inspirada na postagem de Mechaflash em Como definir comandos de saída como uma variável em um arquivo em lotes
e https://ss64.com/nt/syntax-substring.html