MSBuild vs devenv для сборок из командной строки - PullRequest
30 голосов
/ 07 марта 2012

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

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

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

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

Ответы [ 5 ]

22 голосов
/ 07 марта 2012

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

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

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

9 голосов
/ 07 марта 2012

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

4 голосов
/ 20 августа 2014

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

/v:diag
4 голосов
/ 07 марта 2012

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

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

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

2 голосов
/ 07 декабря 2016

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

...