Подтвердить что ты не робот

MSBuild vs devenv для сборки командной строки

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Одно из ограничений MSBuild заключается в том, что он не поддерживает создание проектов установки Visual Studio (.vdproj).

(Вы можете обойти это определение задачи exec, которая вызывает devenv, но тогда вам все еще нужна Visual Studio.)

Ответ 3

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

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

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

Ответ 4

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

/v:diag

Ответ 5

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