Wie kompiliere ich ein Visual Studio-Projekt über die Befehlszeile?

112

Ich schreibe den Checkout-, Build-, Distributions-, Test- und Commit-Zyklus für eine große C ++ - Lösung, die Monotone- , CMake- , Visual Studio Express 2008- und benutzerdefinierte Tests verwendet.

Alle anderen Teile scheinen ziemlich einfach zu sein, aber ich sehe nicht, wie man die Visual Studio-Lösung kompiliert, ohne die GUI zu erhalten.

Das Skript ist in Python geschrieben, aber eine Antwort, mit der ich nur Folgendes aufrufen kann: os.system würde ausreichen.

John Mulder
quelle

Antworten:

115

Ich kenne zwei Möglichkeiten, dies zu tun.

Methode 1
Die erste Methode (die ich bevorzuge) ist die Verwendung von msbuild :

msbuild project.sln /Flags...

Methode 2
Sie können auch Folgendes ausführen:

vcexpress project.sln /build /Flags...

Die Option vcexpress kehrt sofort zurück und druckt keine Ausgabe. Ich nehme an, das ist vielleicht das, was Sie für ein Skript wollen.

Beachten Sie, dass DevEnv nicht mit Visual Studio Express 2008 verteilt wird (ich habe viel Zeit damit verbracht, dies herauszufinden, als ich zum ersten Mal ein ähnliches Problem hatte).

Das Endergebnis könnte also sein:

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

Sie sollten auch sicherstellen, dass Ihre Umgebungsvariablen korrekt sind, da msbuild und vcexpress nicht standardmäßig im Systempfad enthalten sind. Starten Sie entweder die Visual Studio- Buildumgebung und führen Sie Ihr Skript von dort aus aus, oder ändern Sie die Pfade in Python (mit os.putenv ).

Moses Schwartz
quelle
Dies gilt auch für Visual Studio 2010 Express.
Samuel Harmer
msbuild scheint nicht mit VS 2008 ausgeliefert zu werden
Lucky Luke
45

MSBuild funktioniert normalerweise, aber ich bin schon einmal auf Schwierigkeiten gestoßen. Sie haben vielleicht besseres Glück mit

devenv YourSolution.sln /Build 
Jeffrey Hantin
quelle
MSBuild funktioniert nicht mit Visual Fortran-Projekten (* .vfproc). Danke, dass du mich auf devenv hingewiesen hast.
Maik Beckmann
Ich muss verwenden: devenv YourSolution.sln / Build, aber es hat super funktioniert, danke.
Bobwah
7
Sie können auch die Konfiguration angeben:devenv YourSolution.sln /Build Debug
Josh Stribling
Funktioniert super. Man kann auch mit dem folgenden Befehl neu devenv YourSolution.sln /rebuild
erstellen
1
Sie können auch für den Release- oder Debug-Modus neu erstellen, indem Sie Debug oder Release nach einem Leerzeichen anhängen. Zum Beispiel: devenv YourSolution.sln /rebuild releaseoderdevenv YourSolution.sln /rebuild debug
Abhineet
20

Um ehrlich zu sein, muss ich meine 2 Cent hinzufügen.

Sie können dies mit msbuild.exe tun . Es gibt viele Versionen der 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

Verwenden Sie die benötigte Version. Grundsätzlich muss man den letzten verwenden.

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

Also, wie es geht.

  1. Führen Sie das COMMAND- Fenster aus

  2. Geben Sie den Pfad zu msbuild.exe ein

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

  1. Geben Sie den Pfad zur Projektlösung wie folgt ein

"C: \ Benutzer \ Clark.Kent \ Dokumente \ Visual Studio 2012 \ Projekte \ WpfApplication1 \ WpfApplication1.sln"

  1. Fügen Sie nach dem Lösungspfad alle benötigten Flags hinzu.

  2. Drücken Sie ENTER

Beachten Sie, dass Sie Hilfe zu allen möglichen Flags wie erhalten können

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

Entwickler
quelle
6
Ich mag es wirklich, wie Sie die Details für neue Entwickler hinzugefügt haben, wie z. B. wo msbuild usw. zu finden ist
Ayushmati
8

Die Verwendung, msbuildwie von anderen betont, hat für mich funktioniert, aber ich musste ein bisschen mehr als nur das tun. Zunächst msbuildmuss Zugriff auf den Compiler haben. Dies kann durch Ausführen von:

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

War msbuilddann nicht in meinem $ PATH, also musste ich es über seinen expliziten Pfad ausführen:

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

Schließlich verwendete mein Projekt einige Variablen wie $(VisualStudioDir). Es scheint, dass diese nicht von eingestellt werden, msbuildalso musste ich sie manuell über die /propertyOption einstellen :

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

Diese Zeile erlaubte mir dann endlich, mein Projekt zu kompilieren.

Bonus : Es scheint, dass die Befehlszeilentools nach 30 Tagen keine Registrierung erfordern, wie dies bei der "kostenlosen" GUI-basierten Visual Studio Community Edition der Fall ist. Mit der Microsoft-Registrierungspflicht ist diese Version kaum kostenlos. Free-as-in-Facebook, wenn überhaupt ...

josch
quelle
4

MSBuild ist dein Freund.

msbuild "C:\path to solution\project.sln"
Adam Davis
quelle
1
Ich habe gesehen, dass dies in seltsamen Situationen aufgrund von Unterschieden in der Verarbeitung von .sln-Dateien durch MSBuild und DevEnv fehlschlägt.
Jeffrey Hantin
3

DEVENV funktioniert in vielen Fällen gut, aber auf einem WIXPROJ zum Erstellen meines WIX-Installationsprogramms wurde nur der Fehler "CATASTROPHIC" im Out-Protokoll angezeigt.

Dies funktioniert: MSBUILD /Path/PROJECT.WIXPROJ / t: Build / p: Configuration = Release

peter.cyc
quelle