MSBuild vs devenv для сборки командной строки
Мне было интересно: в чем разница между использованием msbuild и devenv при компиляции решений из командной строки?
Одна очевидная вещь заметила, что msbuild создает зависимые проекты, не содержащиеся в решении, в то время как devenv не делает.
Есть ли другие? Есть ли какие-то специальные флаги, которые можно передать в msbuild, чтобы он точно соответствовал строению devenv?
P.S. Я использую Visual Studio 2010 SP1
Ответы
Ответ 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
, чтобы мы не пропускали ошибки.