Лучший инструмент для сборки.NET

Возможный дубликат:
NAnt или MSBuild, какой выбрать и когда?

Каков лучший инструмент для сборки.NET?

В настоящее время я использую NAnt, но только потому, что у меня есть опыт работы с Ant. Является ли MSBuild предпочтительным?

14 ответов

Решение

На самом деле мы используем комбинацию NAnt и MSBuild с CruiseControl. NAnt используется для управления потоком сценариев и вызывает MSBuild для компиляции проектов. После запуска физической сборки NAnt используется для публикации результатов сборки отдельного проекта в общем расположении.

Я не уверен, что это лучший процесс. Я думаю, что многие из нас все еще ищут отличный инструмент для сборки. Одна из многообещающих вещей, которые я недавно слышал о.NET Rocks, эпизод 362, - это PSake Джеймса Ковача, система сборки, полностью основанная на PowerShell. Это звучит очень многообещающе, так как то, что вы можете сделать с PowerShell, в теории довольно безгранично.

Я просто хотел бы добавить FinalBuilder в микс. Это не бесплатно, но если вам надоело редактировать XML- файлы и вы хотите работать в более приятной ( IMO) среде, я бы попробовал.

Я работал со всеми из них и всегда возвращался к FinalBuilder.

Я использую MSBuild полностью для сборки. Вот мой общий скрипт MSBuild, который ищет в дереве файлы.csproj и создает их:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  <UsingTask AssemblyFile="$(MSBuildProjectDirectory)\bin\xUnit\xunitext.runner.msbuild.dll" TaskName="XunitExt.Runner.MSBuild.xunit"/>
  <PropertyGroup>
    <Configuration Condition="'$(Configuration)'==''">Debug</Configuration>
    <DeployDir>$(MSBuildProjectDirectory)\Build\$(Configuration)</DeployDir>
    <ProjectMask>$(MSBuildProjectDirectory)\**\*.csproj</ProjectMask>
    <ProjectExcludeMask></ProjectExcludeMask>
    <TestAssembliesIncludeMask>$(DeployDir)\*.Test.dll</TestAssembliesIncludeMask>
  </PropertyGroup>

  <ItemGroup>
    <ProjectFiles Include="$(ProjectMask)" Exclude="$(ProjectExcludeMask)"/>
  </ItemGroup>

  <Target Name="Build" DependsOnTargets="__Compile;__Deploy;__Test"/>

  <Target Name="Clean">
    <MSBuild Projects="@(ProjectFiles)" Targets="Clean"/>
    <RemoveDir Directories="$(DeployDir)"/>
  </Target>

  <Target Name="Rebuild" DependsOnTargets="Clean;Build"/>

  <!--
  ===== Targets that are meant for use only by MSBuild =====
  -->
  <Target Name="__Compile">
    <MSBuild Projects="@(ProjectFiles)" Targets="Build">
      <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuilt"/>
    </MSBuild>
    <CreateItem Include="@(AssembliesBuilt -> '%(RootDir)%(Directory)*')">
      <Output TaskParameter="Include" ItemName="DeployFiles"/>
    </CreateItem>
  </Target>

  <Target Name="__Deploy">
    <MakeDir Directories="$(DeployDir)"/>
    <Copy SourceFiles="@(DeployFiles)" DestinationFolder="$(DeployDir)"/>
    <CreateItem Include="$(TestAssembliesIncludeMask)">
      <Output TaskParameter="Include" ItemName="TestAssemblies"/>
    </CreateItem>
  </Target>

  <Target Name="__Test">
    <xunit Assembly="@(TestAssemblies)"/>
  </Target>
</Project>

(Извините, если он немного плотный. Уценка, кажется, удаляет пустые строки.)

Это довольно просто, хотя, как только вы понимаете концепции и все зависимости обрабатываются автоматически. Я должен отметить, что мы используем файлы проектов Visual Studio, в которых много встроенной логики, но эта система позволяет людям создавать почти одинаково как в среде Visual Studio IDE, так и в командной строке, и при этом дает вам гибкость добавления объектов. в каноническую сборку, такую ​​как тестирование xUnit, которое вы видите в приведенном выше скрипте.

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

В ItemGroup происходит логика, которая находит все файлы.csproj в дереве.

Кроме того, существуют цели, которым должно следовать большинство людей, знакомых с make, nAnt или MSBuild. Если вы вызываете цель Build, она вызывает __Compile, __Deploy и __Test. Цель Clean вызывает MSBuild для всех файлов проекта, чтобы очистить их каталоги, а затем глобальный каталог развертывания удаляется. Перестройте вызовы Clean, а затем Build.

Существует еще один новый инструмент для сборки (очень интеллектуальная оболочка), который называется NUBuild. Он легкий, с открытым исходным кодом, чрезвычайно прост в настройке и обеспечивает практически полное обслуживание. Мне очень нравится этот новый инструмент, и мы сделали его стандартным инструментом для нашей непрерывной сборки и интеграции наших проектов (у нас около 400 проектов на 75 разработчиков). Попробуйте это.

http://nubuild.codeplex.com/

  • Простой в использовании интерфейс командной строки
  • Возможность нацеливаться на все версии .NET Framework, то есть 1.1, 2.0, 3.0 и 3.5
  • Поддерживает конфигурацию на основе XML
  • Поддерживает ссылки на проекты и файлы
  • Автоматически генерирует "полный список упорядоченных сборок" для данного проекта - без сенсорного обслуживания.
  • Способность обнаруживать и отображать круговые зависимости
  • Выполнить параллельную сборку - автоматически решает, какой из проектов в сгенерированном списке сборки может быть собран независимо.
  • Возможность обрабатывать прокси сборки
  • Предоставляет визуальный ключ к процессу сборки, например, показывает "% выполнено", "текущий статус" и т. Д.
  • Создает подробный журнал выполнения как в XML, так и в текстовом формате.
  • Легко интегрируется с системой непрерывной интеграции CruiseControl.NET
  • Может использовать собственный регистратор, такой как XMLLogger, для версии 2.0 +
  • Возможность разбора журналов ошибок
  • Возможность развертывания встроенных сборок в указанном пользователем месте
  • Возможность синхронизации исходного кода с системой контроля версий
  • Возможность управления версиями

Рейк и Альбакор - отличное сочетание. Сила Ruby и отсутствие XML.

.NET с открытым исходным кодом 5 - .NET автоматизация с Rake и Albacore Лиам МакЛеннан [Tekpub.com]

Мы используем MSBuild, потому что мы начали с Visual Studio 2005 (теперь Visual Studio 2008), а MSBuild уже "встроен" в SDK - на сервере сборки меньше обслуживания. На самом деле это клон NAnt - оба инструмента бесконечно гибки в том смысле, что позволяют создавать собственные задачи сборки в коде, и у обоих уже есть приличный набор задач по созданию сообщества.

Мы используем Bounce, фреймворк для чистых скриптов сборки на C#.

Я использую коммерческое программное обеспечение Automated Build Studio для целей сборки.

Использование динамического языка сценариев, такого как Python, BOO, Ruby и т. Д., Для создания и поддержки сценариев сборки может быть хорошей альтернативой основанным на XML сценариям, таким как NAnt. (Они имеют тенденцию быть чище, чем XML.)

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

Я использовал оба и предпочитаю NAnt. Мне действительно трудно сказать, что одно "лучше", чем другое.

Это также зависит от того, что вы строите. В библиотеке задач MSBuild SDC есть пара специальных задач. Например, для AD, BizTalk и т. Д.

В эту библиотеку включено более 300 задач, включая задачи для: создания веб-сайтов, создания пулов приложений, создания пользователей ActiveDirectory, запуска FxCop, настройки виртуальных серверов, создания zip-файлов, настройки COM +, создания общих папок, установки в GAC, настройки SQL Server., настройка BizTalk 2004 и BizTalk 2006 и т. д.

UppercuT использует NAnt для сборки, и это невероятно простая в использовании Build Framework.

Automated Создает так же просто, как (1) имя решения, (2) путь управления исходным кодом, (3) название компании для большинства проектов!

http://projectuppercut.org/

Несколько хороших объяснений здесь: UppercuT

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

Другие вопросы по тегам