150 votes

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

Je suis en train d'écrire un script pour le cycle de vérification, de construction, de distribution, de test et de validation d'une grande solution C++ qui utilise le logiciel 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 juste de faire un appel à : os.system ferait l'affaire.

145voto

Moses Schwartz Points 1449

Je connais deux façons de le faire.

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 aussi courir :

vcexpress project.sln /build /Flags...

L'option vcexpress retourne immédiatement et n'imprime aucune sortie. Je suppose que cela pourrait ê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).

Donc, le résultat final pourrait être :

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

Vous devrez é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. Soit vous démarrez l'environnement de construction Visual Studio et exécutez votre script à partir de là, soit vous modifiez les chemins dans Python (avec os.putenv ).

0 votes

Ceci est également applicable à Visual Studio 2010 Express.

0 votes

Msbuild ne semble pas être livré avec VS 2008.

0 votes

Et pouvez-vous l'exécuter en dehors d'un "shell MSVS" ?

59voto

Jeffrey Hantin Points 19272

MSBuild fonctionne généralement, mais j'ai déjà rencontré des difficultés. Vous aurez peut-être plus de chance avec

devenv YourSolution.sln /Build

0 votes

MSBuild ne fonctionne pas avec les projets Visual Fortran ( *.vfproc ). Merci de me diriger vers devenv, qui le fait.

10 votes

Vous pouvez également spécifier la configuration : devenv YourSolution.sln /Build Debug

1 votes

Il fonctionne parfaitement. On peut aussi faire la reconstruction en utilisant la commande suivante devenv YourSolution.sln /rebuild

30voto

Clark Kent Points 5845

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

Vous pouvez le faire avec msbuild.exe . Il existe de nombreuses versions du 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 principe, vous devez utiliser la dernière version.

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

Alors comment faire.

  1. Exécuter le COMMANDE fenêtre

  2. Entrez le chemin vers msbuild.exe

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

  1. Entrez le chemin vers la solution du projet comme

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

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

  2. Appuyez sur ENTER

Note : vous pouvez obtenir de l'aide sur tous les drapeaux possibles comme

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

13 votes

J'aime beaucoup la façon dont vous avez ajouté les détails pour les nouveaux développeurs, comme où trouver msbuild, etc.

16voto

josch Points 790

Utilisation de msbuild comme l'ont souligné d'autres personnes, a fonctionné pour moi, mais je devais faire un peu plus que cela. Tout d'abord, msbuild doit avoir accès au compilateur. Ceci peut être fait en exécutant :

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

Puis msbuild n'était pas dans mon $PATH, j'ai donc dû le lancer via son chemin explicite :

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

Enfin, mon projet faisait appel à des variables telles que $(VisualStudioDir) . Il semble que ceux-ci ne soient pas fixés par msbuild J'ai donc dû les définir manuellement via le /property option :

"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 alors enfin permis de compiler mon projet.

Bonus Il semble que les outils en ligne de commande ne nécessitent pas d'enregistrement après 30 jours d'utilisation, contrairement à l'édition communautaire "gratuite" de Visual Studio basée sur l'interface graphique. Avec l'obligation d'enregistrement imposée par Microsoft, cette version est loin d'être gratuite. Gratuite comme dans Facebook, en tout cas...

5voto

Adam Davis Points 47683

MSBuild est votre ami.

msbuild "C:\path to solution\project.sln"

1 votes

J'ai vu cela échouer dans des situations étranges en raison des différences dans la façon dont MSBuild et DevEnv traitent les fichiers .sln.

0 votes

C'est la solution idéale. Mais dans notre cas, nous avons un plug-in MSDEV (Visual Studio 2019) qui déclenche une construction en deux étapes. C'est pour des raisons internes mais msbuild ne construit une cible qu'une seule fois. Nous avons des fichiers spéciaux qui nécessitent que l'EXE soit construit deux fois, une fois en mode stub. Ensuite, un processus exécute l'exe pour créer les fichiers utilisés dans la passe2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X