2010-10-24 13 views
27

Sto scrivendo uno script di compilazione con PowerShell. Gli script esegue varie operazioni come ottenere il codice sorgente più recente al largo della SVN, backup, ecc, e costruisce la soluzione utilizzando MSBuild:MSBuild in uno script PowerShell - Come faccio a sapere se la compilazione è riuscita?

cmd /c C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe "C:\Dev\Path\MyProjct.sln" /p:Configuration=Release 

Dopo questa istruzione, voglio solo eseguire il resto dello script, se la compilazione è riuscita. Come posso controllare questo?

Il progetto è un progetto Web, quindi non è così facile verificare l'output, ma suppongo che alcune variabili contengano il risultato della compilazione. Anche da quando chiamo msbuild con cmd/c, riuscirò ad accedere a queste variabili?

+0

Sono solo curioso ... Perché utilizzare uno script PowerShell per fare la build? Perché non utilizzare un file MSBuild e utilizzare gli ibridi di estensione delle attività là fuori per fare cose come ottenere da SVN? PowerShell è bello e potente, ma in una certa misura si sta prendendo la strada dura. – slugster

+0

Beh, la prima cosa è che non conosco veramente MSBuild, ma ho un'idea che si tratti di uno strumento per la creazione, e potrei faticare a interagire con qualsiasi altra cosa (SVN, WinRAR, ...). Per me la costruzione è solo il 5% del processo di sviluppo e penso che un linguaggio di scripting sia il più appropriato per l'altro 95%. Ma sono felice di sbagliarmi. –

+2

MSBuild è un ottimo strumento di dipendenza orientato alle attività. L'utilizzo di PowerShell consente numerosi scenari e consente approcci orientati al prodotto. Dai un'occhiata anche a PSake, lo usiamo. Quando vuoi estendere le cose, non devi cadere in C# (Attività di MSBuild). Basta aggiungere più PowerShell. –

risposta

36

Verificare il valore di $LastExitCode subito dopo la chiamata a MSBUILD. Se è 0, MSBUILD è riuscito, altrimenti non è riuscito.

BTW non è necessario utilizzare cmd/c. Basta chiamare MSBUILD.exe direttamente. Lo facciamo negli script di build di PowerShell per tutto il tempo.

+0

Come si ottiene il messaggio di errore quando si utilizza $ LastExitCode? – Rookian

+0

È possibile acquisire l'output di exe (incluso stderr). Questo è separato dal controllo del valore di $ LastExitCode. –

+0

Uso l'oggetto C# System.Management.Automation.PowerShell e chiama il metodo Invoke sincrono. Il problema è che né il flusso di errori ha una voce né PowerShell.HadErrors è vero. – Rookian

10

Per verificare l'esito positivo/negativo, utilizzare la variabile automatica $?.

 
PS> help about_Automatic_Variables 


    $? 
     Contains the execution status of the last operation. It contains 
    TRUE if the last operation succeeded and FALSE if it failed. 

ad esempio:

 
msbuild 
if (! $?) { throw "msbuild failed" } 
+5

Mentre '$?' Funziona in questo caso, sii consapevole che un certo numero di console (in particolare gli strumenti Microsoft) invertono la logica del codice di uscita per restituire più codici di successo. Quindi '$?' Non funzionerà su quegli ex. –

Problemi correlati