2014-12-09 15 views
6

Ho questo codice nel mio file build.batcmd msbuild errorlevel è sempre 0

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) 

mio problema è che% errorlevel% sempre 0 anche quando file di log hanno errori e avvisi. !

Utilizzare uno SETLOCAL enabledelayedexpansion e errorlevel:

+0

per i casi in mancanza di qual è il valore di ERRORLEVEL prima condizione per esempio si potrebbe aggiungere temporaneamente ECHO% ERRORLEVEL% prima istruzione if. –

+0

Usa 'SETLOCAL EnableDelayedExpansion' e'! Errorlevel! 'Invece di'% errorlevel% 'o (meglio) ritorna alla sintassi' If ErrorLevel 1'. Impostando [EnabledDelayedExpansion] (http://ss64.com/nt/setlocal.html) ogni variabile verrà espansa al momento dell'esecuzione piuttosto che in fase di analisi: l'analisi, l'interprete dei comandi valuta le variabili _line-by_line_ e/o _command_by_command_ ma tutto il blocco di codice tra parentesi '()' considera un comando. D'altra parte, 'Se ErrorLevel 1' deve essere letto come _if_' ErrorLevel' _è maggiore o uguale a_ '1' quindi _non uguale a_' 0' (_zero_) – JosefZ

+0

Grazie per la tua risposta, ma ho ancora un problema, come vedo sempre 0 in errorlevel. Potete fornire la versione finale del mio codice come risposta? –

risposta

5

commento di JozefZ mi ha aiutato! invece di% errorlevel% o (migliore) ritorna alla sintassi If ErrorLevel 1. L'impostazione di EnabledDelayedExpansion farà sì che ciascuna variabile venga espansa al momento dell'esecuzione piuttosto che in fase di analisi: analizzando, l'interprete dei comandi valuta le variabili line-by_line e/o command_by_command, ma tutte le parentesi in() parentesi considerano un comando. D'altra parte, se ErrorLevel 1 dovrebbe essere letto come se ErrorLevel è maggiore o uguale a 1, quindi, non uguale a 0

0

Mi ha portato un po 'di risolvere questo problema, ma questo è ciò che ha funzionato per me:

msbuild mySolution.sln 
if errorlevel 1 exit /b errorlevel 

non ho bisogno di usare SETLOCAL EnableDelayedExpansion