Comment compiler un projet Visual Studio à partir de la ligne de commande?

113

Je scénarise le cycle d'extraction, de construction, de distribution, de test et de validation pour une grande solution C ++ qui utilise Monotone , CMake , Visual Studio Express 2008 et des tests personnalisés.

Toutes les autres parties semblent assez simples, mais je ne vois pas comment compiler la solution Visual Studio sans obtenir l'interface graphique.

Le script est écrit en Python, mais une réponse qui me permettrait de simplement faire un appel à: os.system ferait l'affaire.

John Mulder
la source

Réponses:

116

Je connais deux façons de procéder.

Méthode 1
La première méthode (que je préfère) est d'utiliser msbuild :

msbuild project.sln /Flags...

Méthode 2
Vous pouvez également exécuter:

vcexpress project.sln /build /Flags...

L'option vcexpress retourne immédiatement et n'imprime aucune sortie. Je suppose que c'est peut-être ce que vous voulez pour un script.

Notez que DevEnv n'est pas distribué avec Visual Studio Express 2008 (j'ai passé beaucoup de temps à essayer de comprendre cela lorsque j'ai eu un problème similaire pour la première fois).

Ainsi, le résultat final pourrait être:

os.system("msbuild project.sln /p:Configuration=Debug")

Vous voudrez également vous assurer que vos variables d'environnement sont correctes, car msbuild et vcexpress ne sont pas par défaut sur le chemin du système. Démarrez l'environnement de génération Visual Studio et exécutez votre script à partir de là, ou modifiez les chemins en Python (avec os.putenv ).

Moïse Schwartz
la source
Cela s'applique également à Visual Studio 2010 Express.
Samuel Harmer
msbuild ne semble pas être livré avec VS 2008
Lucky Luke
46

MSBuild fonctionne généralement, mais j'ai déjà rencontré des difficultés. Vous pourriez avoir plus de chance avec

devenv YourSolution.sln /Build 
Jeffrey Hantin
la source
MSBuild ne fonctionne pas avec les projets Visual Fortran (* .vfproc). Merci de m'avoir dirigé vers devenv, ce qui le fait.
Maik Beckmann
Je dois utiliser: devenv YourSolution.sln / Build mais a très bien fonctionné.
bobwah
7
Vous pouvez également spécifier la configuration:devenv YourSolution.sln /Build Debug
Josh Stribling
Fonctionne très bien. On peut également faire reconstruire en utilisant la commande ci-dessousdevenv YourSolution.sln /rebuild
Abhineet
1
On peut également reconstruire pour la version ou le mode de débogage en ajoutant simplement le débogage ou la libération après un espace. Par exemple: devenv YourSolution.sln /rebuild releaseoudevenv YourSolution.sln /rebuild debug
Abhineet
21

Pour être honnête, je dois ajouter mes 2 cents.

Vous pouvez le faire avec msbuild.exe . Il existe plusieurs versions de msbuild.exe .

C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe

Utilisez la version dont vous avez besoin. En gros, vous devez utiliser le dernier.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

Alors, comment faire.

  1. Exécutez la fenêtre COMMAND

  2. Entrez le chemin vers msbuild.exe

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

  1. Saisissez le chemin d'accès à la solution du projet comme

"C: \ Users \ Clark.Kent \ Documents \ visual studio 2012 \ Projects \ WpfApplication1 \ WpfApplication1.sln"

  1. Ajoutez tous les indicateurs dont vous avez besoin après le chemin de la solution.

  2. Appuyez sur ENTER

Notez que vous pouvez obtenir de l'aide sur tous les indicateurs possibles comme

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe / help

Développeur
la source
6
J'aime vraiment la façon dont vous avez ajouté les détails pour les nouveaux développeurs, comme où trouver msbuild, etc.
Ayushmati
9

Utiliser msbuildcomme indiqué par d'autres a fonctionné pour moi, mais je devais faire un peu plus que cela. Tout d'abord, il msbuildfaut avoir accès au compilateur. Cela peut être fait en exécutant:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

Alors msbuildn'était pas dans mon $ PATH donc j'ai dû l'exécuter via son chemin explicite:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln

Enfin, mon projet utilisait certaines variables comme $(VisualStudioDir). Il semble que ceux-ci ne soient pas définis msbuild, j'ai donc dû les définir manuellement via l' /propertyoption:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln

Cette ligne m'a finalement permis de compiler mon projet.

Bonus : il semble que les outils de ligne de commande ne nécessitent pas d'enregistrement après 30 jours d'utilisation comme le fait l'édition communautaire "gratuite" de Visual Studio Community. Avec l'exigence d'enregistrement Microsoft en place, cette version n'est guère gratuite. Free-as-in-facebook si quelque chose ...

Josch
la source
4

MSBuild est votre ami.

msbuild "C:\path to solution\project.sln"
Adam Davis
la source
1
J'ai vu cela échouer dans des situations étranges en raison de différences dans la façon dont MSBuild et DevEnv traitent les fichiers .sln.
Jeffrey Hantin le
3

DEVENV fonctionne bien dans de nombreux cas, mais sur un WIXPROJ pour construire mon programme d'installation WIX, tout ce que j'ai est une erreur "CATASTROPHIQUE" dans le journal de sortie.

Cela fonctionne: MSBUILD /Path/PROJECT.WIXPROJ / t: Build / p: Configuration = Release

peter.cyc
la source