NAnt или MSBuild, какой из них выбрать и когда?



Я знаю, что есть и другие NAnt и MSBuild связанные вопросы о переполнении стека, но я не мог найти прямого сравнения между ними и поэтому вот вопрос.



когда следует выбрать NAnt над MSBuild? Какой из них лучше для чего? Является ли NAnt более подходящим для домашних / open source проектов и MSBuild для рабочих проектов? Каков опыт работы с любым из этих двух?

746   14  

14 ответов:

Я провел аналогичное расследование на этой неделе. Вот что я смог определить:

NAnt:

  • кросс-платформенный (поддерживает Linux / Mono). Это может быть удобно для установки веб-сайта для нескольких целей (например, Linux Apache и Windows IIS).
  • 95% похоже по синтаксису на Ant (легко для текущих пользователей Ant или Java-строителей подобрать)
  • интеграция с NUnit для выполнения модульных тестов в составе построьте, и с NDoc для producting документации.

MSBuild:

  • встроенный в. NET.
  • интегрирован с Visual Studio
  • легко начать работу с MSBuild в Visual Studio-это все за кулисами. Если вы хотите углубиться, вы можете вручную редактировать файлы.

Субъективные Различия:(YMMV)

  • NAnt документация немного больше простой. Например,Ссылка На Задачу MSBuild lists " Csc Task-описывает задачу Csc и ее параметры. "(спасибо за "помощь"?), против Nant Task Reference " csc-компилирует программы на C#."обновление: Я заметил документация MSBuild был улучшен и теперь намного лучше (вероятно, наравне с NAnt).
  • нелегко понять, как редактировать источник сценария сборки (*.*файл proj ) непосредственно из Visual Studio. С NAnt у меня просто есть Visual Studio treat the .создать скрипт в виде XML-файла.
  • по-видимому, в Visual Studio проекты веб-приложений не получают *.* файл proj по умолчанию, поэтому мне было очень трудно понять, как даже заставить MSBuild работать на моем, чтобы создать сценарий развертывания.
  • NAnt не встроен в Visual Studio и должен быть добавлен либо с надстройкой, либо в качестве "внешнего инструмента". Это немного больно, чтобы установить вверх.
  • (Edit:) один из моих коллег поднял этот вопрос-если вы хотите настроить машину сборки с помощью CruiseControl для непрерывной интеграции, CruiseControl интегрируется с NAnt красиво из коробки. обновление: CruiseControl также имеет задача MSBuild.
  • пожалуйста, смотрите комментарии ниже для полного и современного обсуждения субъективных различий.

один из основных розыгрышей MSBuild для меня (на платформах Windows) является то, что он поставляется как часть самого .NET. Это означает, что любая машина Windows, которая обновлена с помощью Центра Обновления Windows, будет иметь MSBuild. Добавьте к этому тот факт, что компилятор C# также является частью самой .NET, и у вас есть платформа, которая может создавать проекты на чистых машинах. Нет необходимости устанавливать Visual Studio behemoth. С другой стороны, NAnt должен быть явно установлен перед сборкой вызванный.

просто для записи, я использовал NMake, Make, Ant, Rake, NAnt и MSBuild на нетривиальных сборках в прошлом (в этом порядке). Мой любимый MSBuild, руки вниз (и я не одобряю его, потому что "это то, что использует Visual Studio"). ИМХО, это очень недооцененный инструмент сборки.

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

лично я использую оба - для одного и того же проекта.

MSBuild отлично подходит для создания решений и проектов Visual Studio - вот для чего он создан.

NAnt более легко редактируется вручную, на мой взгляд, особенно если вы уже знаете Ant. NAnt может вызвать MSBuild очень легко с NAntContrib. Итак, я вручную создаю сценарий NAnt для таких вещей, как копирование встроенных файлов, очистка и т. д. - и вызываю MSBuild, чтобы сделать фактический " превратить мой исходный код C# в сборки" часть.

Если вы хотите пример этого, смотрите на моем буферы протокола построить файл. (Я бы не стал утверждать, что это потрясающий сценарий NAnt, но он делает свою работу.)

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

MSBuild занимает некоторое время, чтобы понять, но как только вы это сделаете, это очень приятно.

учебные материалы:

поцелуй = Использовать MSBuild.

зачем добавлять что-то еще в микс, когда у вас есть что-то, что будет делать разумную работу из коробки? Когда MSBuild прибыл, Нэнт умер. И моно будет иметь реализацию MSBuild, (xbuild).

сухой = Использовать MSBuild.

спросите себя, что вы хотите от системы сборки? Я хочу построить систему, которая также используется моя IDE а не поддержание двух различных конфигураций.

лично я хотел бы услышать некоторые реальные аргументы за Нэнт, потому что я просто не могу думать о том, что действительно держит воду.

одна вещь, которую я заметил, несколько плакатов упоминалось, чтобы вручную отредактировать .csproj (or .vbproj и т. д.) архив.

MSBuild позволяет настраивать их .*proj файлы с помощью .файлы пользователя. Если у меня есть проект с именем MyCreativelyNamedProject.csproj и хотите настроить задачи MSBuild внутри него, я могу создать файл с именем MyCreativelyNamedProject.csproj. и с помощью CustomBeforeMicrosoftCommonTargets и CustomAfterMicrosoftCommonTargets настройки этих файлов.

кроме того, как NAnt, так и MSBuild могут быть настроены в соответствии с содержанием сердца через пользовательские задачи MSBuild и через расширения NantContrib.

Итак, использование NAnt или MSBuild действительно сводится к знакомству:

  • если вы уже знакомы с Ant, используйте NAnt. Кривая обучения будет очень легко.
  • если вы не знакомы с любым инструментом, MSBuild интеграция с Visual Studio уже и не требует никаких дополнительных инструментов.

также стоит добавить, что MSBuild практически гарантированно будет работать со всеми новыми версиями .NET и Visual Studio, как только они будут выпущены, тогда как NAnt может иметь некоторое отставание.

Я использую оба в том, что мой NAnt скрипты вызывают MSBuild. Моя главная причина для пребывания с Нэнт изоляции. Позвольте мне объяснить, почему я чувствую, что это важно:

  1. добавление зависимостей к вашему проекту. Файл сборки NAnt чужд Visual Studio (в моем случае я считаю это pro), поэтому Visual Studio не пытается ничего с ним делать. Задачи MSBuild являются встроенной частью решения и могут ссылаться на другие задачи MSBuild. Я получил исходный код от кого-то другого только для того, чтобы узнать, что я не мог построить, потому что задачи сообщества MSBuild не были установлены. Что меня особенно расстраивает, так это то, что Visual Studio просто не будет строить и бросил кучу ошибок, которые заставили меня потерять время отладки. Это, несмотря на то, что запрашиваемая сборка могла бы идти вперед (например, отладочная сборка) без некоторых дополнительных функций задачи MSBuild. Короче говоря:мне не нравится добавлять зависимости в мой проект, если Я могу избежать этого.

  2. Я не доверяю Visual Studio, насколько я мог бы бросить свою команду разработчиков. Это восходит к ранним дням Visual Studio, когда он уничтожил бы мой HTML. Я до сих пор не использую конструктор, например (на конференции недавно я нашел коллеги сделали то же самое). Я обнаружил, что Visual Studio может испортить зависимости и номера версий в DLL-файле (я не могу реплицировать это, но это произошло в проекте последовательно и вызвало много горя и потерянного времени). Я прибегнул к процедуре сборки, которая использует Visual Studio для сборки только в режиме отладки. Для производства я использую NAnt, чтобы контролировать все внешне. Visual Studio просто не может больше вмешиваться, если я строю с помощью NAnt.

PS: Я веб-разработчик и не занимаюсь разработкой Windows Forms.

хотя я не очень хорошо знаком с MsBuild, у меня сложилось впечатление, что некоторые из ключевых различий с обеих сторон могут быть дополнены дополнениями:

недавно мне пришлось построить проект Silverlight в Нанте. Я обнаружил, что жизнь была бы проще, если бы я просто сделал это с MsBuild - я закончил вызов задачи MsBuild из сценария Nant, поэтому я полагаю, что это не слишком из обычных смешивать и сочетать два.

кроме того, я полагаю, что это будет вопрос личных предпочтений - очевидно, вы можете управлять некоторыми/большинством функций MsBuild из Visual Studio, Если это ваша вещь. Nant кажется более гибким и лучше подходит, если вы предпочитаете писать сценарии вручную, и если вы пришли из мира Java, вы, вероятно, будете дома с ним.

Я в конечном итоге с помощью обоих. При перепроектировании нашей системы сборки я столкнулся с сложной проблемой. А именно, я не мог избавиться от .vcproj (и семья), потому что мы все использовали VS для обновления файлов проекта, настроек и конфигураций. Таким образом, без огромного дублирования и подверженного ошибкам процесса мы не могли бы основывать нашу систему сборки на новом наборе файлов.

по этой причине я решил сохранить файлы "proj" VS и использовать MSBuild (это файлы MSBuild, по крайней мере VS2005 и VS2008 использовать файлы проекта MSBuild). Для всего остального (пользовательская конфигурация, модульное тестирование, упаковка, подготовка документации...) Я использовал Нант.

для непрерывной интеграции, я CruiseControl. Так у нас было КС скрипты, которые запускаются Нант рабочих мест, что для строительства используется в MSBuild.

последнее замечание: MSBuild не поддерживает проекты установки! Так что вы застряли с вызовом DevEnv.com или с помощью Visual Studio напрямую. Это то, что я в конечном итоге сделал, но я отключил проект установки с помощью по умолчанию из всех конфигураций решений, поскольку разработчикам обычно не нужно их создавать, и если они это делают, они могут вручную выбрать их для сборки.

Я недавно переключился с NAnt на MSBuild из-за его способности создавать решения VS. Хотя я все еще иногда использую NAnt.

вы также можете проверить Задачи Сообщества MSBuild который похож на NAntContrib.

документация и учебные пособия, доступные для NAnt, облегчают начало обучения сценариям сборки с помощью NAnt. Как только я получил навык NAnt и создал сценарии сборки, я начал переводить эти знания в MSBuild (я сделал X в NAnt, как мне сделать X в MSBuild?). Документация Microsoft обычно предполагает довольно высокий уровень знаний, прежде чем это будет полезно.

причина переключения с NAnt на MSBuild заключается в том, что MSBuild является более актуальным. К сожалению, последний релиз NAnt был в декабре 8 2007 года, в то время как MSBuild 4.0 (.NET 4.0) не за горами. Похоже, что проект Нанте умер.

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

мы используем оба. NAnt отвечает за все "скриптовые" вещи, такие как копирование, развертывание на IIS, создание пакетов и MSBuild отвечает за построение решения. Тогда мы можем избежать проблем с не поддерживаемым .NET 4.0 с помощью новой версии NAnt.

NAnt также является более масштабируемым. Если мы хотим перенести сценарии развертывания на рабочие серверы, мы только копируем файл сборки и устанавливаем правильную версию .NET - никаких проблем Visual Studio с csproj файлы:)

YDeliver по Манодж является основой построения построенный на вершине PSake. Он имеет богатый набор библиотечных функций, возможность определять рабочие процессы, и мы использовали его для доставки более шести корпоративных проектов в производство.

использовать его в сочетании с TeamCity,CruiseControl, или все, что может работать PowerShell.

мы используем FlubuCore. Это библиотека C# с открытым исходным кодом для построения проектов и выполнения сценариев развертывания с использованием кода C#.

простой пример использования flubu:

protected override void ConfigureTargets(ITaskContext session)
{           

    var compile = session.CreateTarget("compile")
        .SetDescription("Compiles the solution.")
        .AddTask(x => x.CompileSolutionTask())
        .DependsOn("generate.commonassinfo");
}

вы можете найти дополнительную информацию о flubu и как начать работу здесь: выбор-для-построения-инструмент-в MSBuild-Нант-или-что-то-другое

Comments

    Ничего не найдено.