Egal wie ich es versuche, der Errorlevel bleibt immer 0, auch wenn msbuild fehlgeschlagen ist. Also habe ich meinen Workaround gebaut:
Projekt erstellen und Protokoll in Build.log speichern
SET Build_Opt=/flp:summary;logfile=Build.log;append=true
msbuild "myproj.csproj" /t:rebuild /p:Configuration=release /fl %Build_Opt%
Suche nach der Zeichenkette "0 Error" im Erstellungsprotokoll, Setzen des Ergebnisses auf var
FOR /F "tokens=* USEBACKQ" %%F IN (`find /c /i "0 Error" Build.log`) DO (
SET var=%%F
)
echo %var%
liefert das letzte Zeichen, das angibt, in wie vielen Zeilen der Suchbegriff enthalten ist
set result=%var:~-1%
echo "%result%"
wenn String nicht gefunden, dann Fehler > 0, Build fehlgeschlagen
if "%result%"=="0" ( echo "build failed" )
Diese Lösung wurde inspiriert durch Mechaflashs Beitrag auf Ausgabe von Befehlen als Variable in einer Batch-Datei
et https://ss64.com/nt/syntax-substring.html