Преимущества использования MSBuild или NAnt в сравнении с запуском DevEnv.exe из командной строки

Может ли кто-нибудь объяснить, какие преимущества есть в использовании инструмента, такого как MSBuild (или NAnt), для создания коллекции проектов или запуска DevEnv.exe из командной строки?

Сотрудник, с которым я работал в прошлом, объяснил, что (по крайней мере, с более старыми версиями Visual Studio) с использованием DevEnv.exe было намного медленнее, чем другие методы, но я не читал никаких доказательств этого или если теперь теперь спорный момент, что начиная с 2005 года Visual Studio использует MSBuild под капотом.

Я знаю, что одно преимущество использования MSBuild позволяет создавать ваши проекты, не требуя установки Visual Studio на машинах сборки, но я не был уверен, что есть другие.

Ответ 1

Одна из причин заключается в том, что для создания продукта гораздо больше, чем для его компиляции. Из-за того, что предоставляют эти инструменты (и их расширения), задачи, такие как создание установок, обновление номеров версий, создание эскродов, распространение финальных пакетов и т.д., Могут быть намного проще.

Пока вы можете делать все это с помощью обычных скриптов, использование NAnt или MSBuild дает вам прочную основу для выполнения всего этого. Там много поддержки сообщества для обоих, включая дополнительные задачи, которые можно загрузить (например, для создания с помощью несколько процессоров.

Ответ 2

Очевидным ответом моей команды является то, что не имеет визуальной студии, установленной, в частности, мы не устанавливаем Visual Studio на наши серверы сборки/CI.

Ответ 3

Основная причина использования внешнего инструмента построения, такого как NAnt или MsBuild, - это возможность автоматизировать процесс сборки и, таким образом, обеспечить постоянную обратную связь о состоянии вашей системы. Кроме того, они могут использоваться для множества вещей, помимо "чистой" сборки, и что, когда вы действительно начинаете получать от них ценность, это чрезвычайно ценная вещь, чтобы иметь возможность создавать и тестировать ваше приложение с помощью одной команды.

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

Ответ 4

Что касается С#, то devenv.exe 2005 запускает компилятор in-proc, что может вызвать исключения из памяти для значимых решений. Msbuild приступает к запуску процесса csc.exe для каждого проекта. Проекты, которые не компилируются с devenv/build, отлично работают с msbuild. Надеюсь, вам понравится эта причина.

Ответ 5

Мы экспериментируем с переключением с DevEnv на инструмент (Visual Build Pro), который использует MsBuild под капотом, и мы получили ссылку, требуемую для сборки "Ошибка System.Drawing..." для проекта, который не нужен он и который прекрасно работает в Visual Studio.

Ответ 6

У нас есть большая система, состоящая из С#, управляемых С++ и простых старых неуправляемых сборок /dlls С++. Существует код С++, который зависит от управляемого кода С++, который зависит от кода С#, который зависит от управляемого кода на С++, который зависит от простого старого кода на С++ (whew!). Когда мы создавали нашу автоматизированную среду сборки несколько лет назад, мы обнаружили, что MSBuild.exe неправильно обрабатывал все зависимости, которые у нас есть.

Работая с Microsoft, мы смогли решить некоторые проблемы, но не все из них. Если моя память служит мне, мы никогда не смогли собрать сборки С#, которые зависели от управляемых библиотек С++ для сборки. Таким образом, мы закончили создание пользовательской сборки script, которая вызвала devenv.exe из командной строки, и она отлично работала.

Конечно, это было с VS2005, теперь оно может быть исправлено, но script все еще работает, поэтому мы не пересматриваем проблему.