Как скомпилировать проект Visual Studio из командной строки?

Я обрабатываю цикл проверки, сборки, распространения, тестирования и фиксации для большого С++-решения, использующего Monotone, CMake, Visual Studio Express 2008 и пользовательские тесты.

Все остальные части выглядят довольно прямолинейно, но я не вижу, как скомпилировать решение Visual Studio без получения графического интерфейса.

script написан на Python, но ответ, который позволит мне просто позвонить: os.system.

Ответ 1

Я знаю два способа сделать это.

Метод 1
Первый метод (который я предпочитаю) заключается в использовании msbuild:

msbuild project.sln /Flags...

Метод 2
Вы также можете запустить:

vcexpress project.sln /build /Flags...

Опция vcexpress немедленно возвращается и не выводит никаких результатов. Полагаю, это может быть то, что вы хотите для script.

Обратите внимание, что DevEnv не распространяется с Visual Studio Express 2008 (я потратил много времени, пытаясь понять это, когда у меня была аналогичная проблема).

Итак, конечный результат может быть:

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

Вы также захотите убедиться, что переменные среды верны, поскольку msbuild и vcexpress по умолчанию не заданы по системному пути. Либо запустите среду сборки Visual Studio и запустите свой script, либо измените пути в Python (os.putenv).

Ответ 2

MSBuild обычно работает, но раньше я сталкивался с трудностями. Возможно, вам повезло с

devenv YourSolution.sln /Build 

Ответ 3

Честно говоря, я должен добавить свои 2 цента.

Вы можете сделать это с помощью msbuild.exe. Существует много версий 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

Используйте нужную вам версию. В основном вы должны использовать последний.

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

Итак, как это сделать.

  • Запустите окно COMMAND

  • Введите путь к msbuild.exe

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

  • Введите путь к решению проекта, например

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

  • Добавьте необходимые флаги после пути решения.

  • Нажмите ВВОД

Обратите внимание, что вы можете получить помощь обо всех возможных флагах, например

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

Ответ 5

Использование msbuild, как указывали другие, работало для меня, но мне нужно было сделать нечто большее, чем просто это. Прежде всего, msbuild должен иметь доступ к компилятору. Это можно сделать, выполнив:

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

Тогда msbuild не было в моей $PATH, поэтому я должен был запустить его через свой явный путь:

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

Наконец, в моем проекте использовались некоторые переменные типа $(VisualStudioDir). Кажется, что они не устанавливаются с помощью msbuild, поэтому я должен был установить их вручную с помощью опции /property:

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

Эта строка, наконец, позволила мне скомпилировать мой проект.

Бонус: кажется, что инструменты командной строки не требуют регистрации через 30 дней после их использования, как это делает "бесплатная" версия Visual Studio сообщества на основе графического интерфейса. С требованием регистрации Microsoft, эта версия вряд ли бесплатна. Free-as-in-facebook, если что-нибудь...

Ответ 6

DEVENV хорошо работает во многих случаях, но на WIXPROJ для сборки моего установщика WIX все, что я получил, это ошибка "CATASTROPHIC" в журнале Out.

Это работает: MSBUILD/Path/PROJECT.WIXPROJ/t: Build/p: Configuration = Release