2010-10-24 16 views
27

J'écris un script de build avec Powershell. Les scripts effectue diverses opérations telles que l'obtention du dernier code source de l'SVN, sauvegardes, etc., et construit la solution en utilisant MSBuild:MSBuild dans un script Powershell - Comment savoir si la compilation a réussi?

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

Après cette instruction, je veux seulement exécuter le reste du script si la compilation a réussi. Comment puis-je vérifier cela?

Le projet est un projet web, donc il n'est pas si facile de vérifier une sortie, mais je suppose que certaines variables contiendraient le résultat de la compilation. Aussi, puisque j'appelle msbuild avec cmd/c, vais-je pouvoir accéder à ces variables?

+0

Je suis juste curieux ... pourquoi utiliser un script PowerShell pour faire la construction? Pourquoi ne pas utiliser un fichier MSBuild et utiliser les bibliothèques de tâches d'extension pour faire des choses comme obtenir de SVN? PowerShell est cool et puissant, mais dans une certaine mesure, vous prenez la route difficile. – slugster

+0

Eh bien, la première chose est que je ne connais pas vraiment MSBuild, mais j'ai une idée que c'est un outil de construction, et je peux avoir du mal à interagir avec autre chose (SVN, WinRAR, ...). Pour moi, la construction est seulement 5% du processus de développement et je pense qu'un langage de script est le plus approprié pour l'autre 95%. Mais je suis heureux d'avoir tort. –

+2

MSBuild est un excellent outil de dépendance orienté sur les tâches. L'utilisation de PowerShell permet de nombreux scénarios et permet des approches orientées produit. Découvrez PSake aussi, nous utilisons cela. Lorsque vous voulez étendre les choses, vous n'avez pas besoin de passer en C# (tâches MSBuild). Vous venez d'ajouter plus de PowerShell. –

Répondre

36

Vérifiez la valeur de $LastExitCode juste après l'appel à MSBUILD. Si c'est 0, MSBUILD a réussi, sinon il a échoué.

BTW il n'est pas nécessaire d'utiliser cmd/c. Appelez MSBUILD.exe directement. Nous le faisons dans les scripts de construction PowerShell tout le temps.

+0

Comment obtenez-vous le message d'erreur lorsque vous utilisez $ LastExitCode? – Rookian

+0

Vous pouvez capturer la sortie de l'exe (y compris stderr). Cela est distinct de la vérification de la valeur de $ LastExitCode. –

+0

J'utilise l'objet C# System.Management.Automation.PowerShell et appelle la méthode Invoke synchrone. Le problème est que ni le flux d'erreurs a une entrée ni PowerShell.HadErrors est vrai. – Rookian

10

Pour vérifier la réussite ou l'échec, utilisez la variable automatique $?.

 
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. 

par exemple:

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

Alors que '$?' Fonctionne dans ce cas, sachez qu'un certain nombre d'exes de la console (en particulier les outils Microsoft) inversent la logique du code de sortie pour renvoyer plusieurs codes de succès. Donc "$?" Ne fonctionnera pas sur ces exes. –

Questions connexes