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

113

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

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

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

Джон Малдер
источник

Ответы:

116

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

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

msbuild project.sln /Flags...

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

vcexpress project.sln /build /Flags...

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

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

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

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

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

Моисей Шварц
источник
Это также применимо к Visual Studio 2010 Express.
Сэмюэл Хармер
msbuild, похоже, не поставляется с VS 2008
Lucky Luke
46

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

devenv YourSolution.sln /Build 
Джеффри Хантин
источник
MSBuild не работает с проектами Visual Fortran (* .vfproc). Спасибо, что указали мне на devenv, и это так.
Майк Бекманн
Мне нужно использовать: devenv YourSolution.sln / Build, но спасибо за работу.
bobwah
7
Вы также можете указать конфиг:devenv YourSolution.sln /Build Debug
Джош Стриблинг,
Прекрасно работает. Также можно выполнить перестройку, используя команду нижеdevenv YourSolution.sln /rebuild
Abhineet
1
Также можно перестроить для режима выпуска или отладки, просто добавив отладку или выпуск после одного пробела. Например: devenv YourSolution.sln /rebuild releaseилиdevenv YourSolution.sln /rebuild debug
Abhineet
21

Если честно, я должен добавить свои 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

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

  1. Запустите окно КОМАНДА

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

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

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

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

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

  2. Нажмите ENTER.

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

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe / справка

Разработчик
источник
6
Мне очень нравится, как вы добавили детали для новых разработчиков, например, где найти msbuild и т. Д.
Аюшмати
9

Использование, 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 Community на основе графического интерфейса. С учетом требований о регистрации Microsoft эта версия вряд ли может быть бесплатной. Free-as-in-facebook, если что ...

josch
источник
4

MSBuild - ваш друг.

msbuild "C:\path to solution\project.sln"
Адам Дэвис
источник
1
Я видел, что это не удается в странных ситуациях из-за различий в том, как MSBuild и DevEnv обрабатывают файлы .sln.
Джеффри Хантин,
3

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

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

peter.cyc
источник