web-dev-qa-db-fra.com

MSBuild vs devenv pour les builds en ligne de commande

Je me demandais: quelle est la différence entre l'utilisation de msbuild et devenv lors de la compilation de solutions à partir de la ligne de commande?

Une chose évidente a été remarquée: msbuild crée des projets dépendants non contenus dans la solution, contrairement à devenv.

Y en a-t-il d'autres? Y a-t-il des drapeaux spéciaux que l'on pourrait passer à msbuild pour qu'il corresponde exactement à la construction devenv?

P.S. J'utilise Visual Studio 2010 SP1

33
Filip Frącz

Selon cela MSDN Blog Entry ils essaient de minimiser les différences, mais celles qui existent (c'est-à-dire en utilisant un compilateur C # intégré au lieu de csc.exe ou la définition de la propriété BuildingInsideVisualStudio) sont principalement effectuées pour optimiser les performances des builds.

9
Christian.K

Le principal avantage de MSBuild est que vous n'avez pas besoin d'avoir Visual Studio installé.

Une limitation de MSBuild est qu'il ne prend pas en charge la construction de projets d'installation de Visual Studio (. Vdproj).

(Vous pouvez contourner ce problème en définissant une tâche exec qui appelle devenv , mais vous avez toujours besoin de Visual Studio.)

22
shamp00

J'ai expérimenté un projet au sein d'une équipe multicouche: développeurs, testeurs, déployeurs. MSBuild était l'outil principal des déployeurs: ils pouvaient compiler et recompiler, en définissant simplement les paramètres de construction en éditant le fichier de configuration xml de MSBuild sans ouvrir le devenv. En fait, ils utilisaient souvent MSBuild dans un environnement de pré-production où il n'y avait aucun développement.

Nant est un outil similaire de la Fondation Apache.

Pour plus d'informations jetez un œil ici:

4
Alberto De Caro

Une autre différence majeure est que msbuild a des options qui n'existent pas pour devenv. Pour autant que je sache, il n'y a aucun moyen d'augmenter la verbosité de devenv mais vous pouvez augmenter la verbosité de msbuild par l'option:

/v:diag
4
RunHolt

J'ai rencontré un cas où devenv a écrit un message d'erreur lorsqu'un fichier de projet manquait, mais a quand même renvoyé 0. En revanche, msbuild a renvoyé une valeur différente de zéro. J'ai changé notre makefile en utilisant msbuild pour ne pas oublier les erreurs.

2
Alan