2012-03-07 8 views
24

Мне было интересно: в чем разница между использованием msbuild и devenv при компиляции решений из командной строки?MSBuild vs devenv для построения командной строки

Одна очевидная вещь заметила, что msbuild действительно создает зависимые проекты, не содержащиеся в решении, а devenv - нет.

Есть ли другие? Есть ли какие-то специальные флаги, которые можно передать в msbuild, чтобы он точно соответствовал сборке devenv?

P.S. Я использую Visual Studio 2010 SP1

+1

В конце концов devenv вызывает msbuild для выполнения сборки! –

ответ

9

Согласно этому MSDN Blog Entry они пытаются свести к минимуму различия, но те, которые существуют (например, с использованием интегрированной C# компилятор вместо csc.exe или установка свойства BuildingInsideVisualStudio) в основном выполняются для оптимизации производительности сборки.

4

Я испытал проект в многослойной команде: разработчики, тестеры, развертыватели. MSBuild был основным инструментом развертывателей: они могли компилировать и перекомпилировать, просто установив параметры здания, редактируя xml-файл конфигурации MSBuild, не открывая devenv. Фактически, они часто использовали MSBuild в среде с предварительным выпуском, где вообще не было devenv.

Нант - аналогичный инструмент от Apache Foundation.

Для получения дополнительной информации посмотрите здесь:

20

Основным преимуществом MSBuild является то, что вам не нужно иметь установленный Visual Studio.

Одно ограничение MSBuild является то, что он не поддерживает строительство Визуальные проекты студийные (.vdproj).

(Вы можете обойти это defining an exec task which calls devenv, но вам все еще нужно Visual Studio.)

4

Другое важное отличие состоит в том, что у msbuild есть некоторые варианты, которых нет для devenv. Насколько я могу сказать, что нет никакого способа, чтобы увеличить многословие для devenv но вы можете увеличить многословие для msbuild с помощью опции:

/v:diag 
1

я столкнулся случай, когда devenv написал сообщение об ошибке, когда файл проекта был отсутствует, но в любом случае возвратил 0. Напротив, msbuild вернул ненулевое значение. Я переключил наш makefile на использование msbuild, чтобы мы не упустили ошибки.

 Смежные вопросы

  • Нет связанных вопросов^_^