Jak skompilować projekt programu Visual Studio z wiersza polecenia?

113

Piszę w skryptach cykl pobierania, kompilacji, dystrybucji, testowania i zatwierdzania dla dużego rozwiązania C ++, które korzysta z Monotone , CMake , Visual Studio Express 2008 i testów niestandardowych.

Wszystkie inne części wydają się dość proste, ale nie widzę, jak skompilować rozwiązanie Visual Studio bez uzyskiwania GUI.

Skrypt jest napisany w Pythonie, ale wystarczyłaby odpowiedź, która pozwoliłaby mi po prostu zadzwonić do: os.system.

John Mulder
źródło

Odpowiedzi:

116

Znam dwa sposoby, aby to zrobić.

Metoda 1
Pierwsza metoda (którą wolę) polega na użyciu msbuild :

msbuild project.sln /Flags...

Metoda 2
Możesz także uruchomić:

vcexpress project.sln /build /Flags...

Opcja vcexpress zwraca natychmiastowo i nie wyświetla żadnych danych wyjściowych. Przypuszczam, że to może być to, czego potrzebujesz do scenariusza.

Zwróć uwagę, że DevEnv nie jest dystrybuowany z Visual Studio Express 2008 (spędziłem dużo czasu, próbując to rozgryźć, kiedy pierwszy raz miałem podobny problem).

Tak więc końcowy wynik może wyglądać następująco:

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

Będziesz także chciał upewnić się, że zmienne środowiskowe są poprawne, ponieważ msbuild i vcexpress domyślnie nie znajdują się na ścieżce systemowej. Uruchom środowisko kompilacji programu Visual Studio i uruchom z niego skrypt lub zmodyfikuj ścieżki w języku Python (za pomocą os.putenv ).

Moses Schwartz
źródło
Dotyczy to również programu Visual Studio 2010 Express.
Samuel Harmer
Wygląda na to, że msbuild nie jest dostępny z VS 2008
Lucky Luke
46

MSBuild zwykle działa, ale wcześniej napotkałem trudności. Możesz mieć więcej szczęścia

devenv YourSolution.sln /Build 
Jeffrey Hantin
źródło
Program MSBuild nie działa z projektami programu Visual Fortran (* .vfproc). Dzięki za wskazanie mi devenv.
Maik Beckmann
Muszę użyć: devenv YourSolution.sln / Build, ale działało świetnie, dzięki.
bobwah
7
Możesz również określić konfigurację:devenv YourSolution.sln /Build Debug
Josh Stribling,
Działa świetnie. Można również odbudować za pomocą poniższego poleceniadevenv YourSolution.sln /rebuild
Abhineet
1
Można również przebudować do trybu wydania lub debugowania, po prostu dodając debug lub release po jednej spacji. Na przykład: devenv YourSolution.sln /rebuild releaselubdevenv YourSolution.sln /rebuild debug
Abhineet
21

Szczerze mówiąc, muszę dodać moje 2 centy.

Możesz to zrobić za pomocą msbuild.exe . Istnieje wiele wersji 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

Użyj wersji, której potrzebujesz. Zasadniczo musisz użyć ostatniego.

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

Więc jak to zrobić.

  1. Uruchom okno COMMAND

  2. Wprowadź ścieżkę do msbuild.exe

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

  1. Wprowadź ścieżkę do rozwiązania projektu, takiego jak

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

  1. Dodaj potrzebne flagi po ścieżce rozwiązania.

  2. Naciśnij ENTER

Zauważ, że możesz uzyskać pomoc dotyczącą wszystkich możliwych flag, takich jak

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

Deweloper
źródło
6
Naprawdę podoba mi się sposób, w jaki dodałeś szczegóły dla nowych programistów, takie jak gdzie znaleźć msbuild itp.
Ayushmati
9

Używanie, msbuildjak wskazali inni, działało dla mnie, ale musiałem zrobić coś więcej niż tylko to. Przede wszystkim msbuildmusi mieć dostęp do kompilatora. Można to zrobić, uruchamiając:

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

Wtedy msbuildnie było w mojej $ PATH, więc musiałem go uruchomić za pomocą wyraźnej ścieżki:

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

Wreszcie, mój projekt wykorzystywał pewne zmienne, takie jak $(VisualStudioDir). Wygląda na to, że się nie ustawiają, msbuildwięc musiałem ustawić je ręcznie za pomocą /propertyopcji:

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

W końcu ta linia pozwoliła mi skompilować projekt.

Bonus : wygląda na to, że narzędzia wiersza poleceń nie wymagają rejestracji po 30 dniach korzystania z nich, tak jak robi to „bezpłatna”, oparta na GUI edycja Visual Studio Community. Po wprowadzeniu wymogu rejestracji firmy Microsoft ta wersja nie jest prawie darmowa. Bezpłatnie jak na Facebooku, jeśli cokolwiek ...

josch
źródło
4

MSBuild to Twój przyjaciel.

msbuild "C:\path to solution\project.sln"
Adam Davis
źródło
1
Widziałem, że zawodziło to w dziwnych sytuacjach z powodu różnic w przetwarzaniu plików .sln przez programy MSBuild i DevEnv.
Jeffrey Hantin
3

DEVENV działa dobrze w wielu przypadkach, ale na WIXPROJ, aby zbudować mój instalator WIX, jedyne, co mam, to błąd „CATASTROPHIC” w dzienniku Out.

Działa to: MSBUILD /Path/PROJECT.WIXPROJ / t: Build / p: Configuration = Release

peter.cyc
źródło