Jak skompilować projekt Visual Studio z wiersza poleceń?

Piszę skrypty w cyklu checkout, build, distribution, test i commit dla dużego rozwiązania C++, które używa Monotone, CMake , Visual Studio Express 2008 i niestandardowe testy.

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

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

Author: Peter Mortensen, 2009-01-31

6 answers

Znam dwa sposoby.

Metoda 1
Pierwszą metodą (którą preferuję) jest użycie msbuild :

msbuild project.sln /Flags...

Metoda 2
Można również uruchomić:

vcexpress project.sln /build /Flags...

Opcja vcexpress powraca natychmiast i nie wyświetla żadnych danych wyjściowych. Przypuszczam, że to może być to, co chcesz za scenariusz.

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

Więc efekt końcowy może być:

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

Należy również upewnić się, że zmienne środowiskowe są poprawne, ponieważ msbuild i vcexpress nie są domyślnie na ścieżce systemowej. Możesz uruchomić środowisko kompilacji Visual Studio i uruchomić tam skrypt lub zmodyfikować ścieżki w Pythonie (z systemem operacyjnym .putenv ).

 97
Author: Moses Schwartz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 08:34:47

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

devenv YourSolution.sln /Build 
 40
Author: Jeffrey Hantin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-25 00:29:17

Aby być szczerym 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 polecenie window

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

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

  1. wprowadź ścieżkę do rozwiązanie projektu jak

"C:\Users\Clark.Kent\dokumenty\visual studio 2012 \ Projekty \ Aplikacja Wpf1\Aplikacja Wpf1.sln "

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

  2. Naciśnij ENTER

Uwaga możesz uzyskać pomoc na temat wszystkich możliwych FLAG, takich jak

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

 15
Author: Academy of Programmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 20:01:03

Używanie msbuild, jak wskazywali inni, działało dla mnie, ale musiałem zrobić trochę więcej niż tylko to. Po pierwsze, msbuild musi mieć dostęp do kompilatora. Można to zrobić uruchamiając:

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

Wtedy msbuild nie było w mojej $PATH więc musiałem go uruchomić poprzez jego jawną ścieżkę:

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

Wreszcie, mój projekt korzystał z pewnych zmiennych, takich jak $(VisualStudioDir). Wygląda na to, że nie są one ustawiane przez msbuild, więc musiałem je ustawić ręcznie za pomocą opcji /property:

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

That line then finally pozwolił mi skompilować mój projekt.

Bonus: wydaje się, że narzędzia wiersza poleceń nie wymagają rejestracji po 30 dniach korzystania z nich, tak jak robi to "darmowy" Visual Studio Community edition oparty na GUI. Z wymogiem rejestracji firmy Microsoft, ta wersja jest prawie bezpłatna. Free-as-in-facebook jeśli już...

 5
Author: josch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 08:20:49

MSBuild jest twoim przyjacielem.

msbuild "C:\path to solution\project.sln"
 3
Author: Adam Davis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 12:51:06

DEVENV działa dobrze w wielu przypadkach, ale na WIXPROJ, aby zbudować mój instalator WIX, wszystko, co mam, to "katastrofalny" błąd w Dzienniku wyjścia.

To działa: MSBUILD / Path / PROJECT.WIXPROJ/t: Build / p: Configuration=Release

 1
Author: peter.fr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 08:47:03