Лучший инструмент для сборки.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 разработчиков). Попробуйте это.
- Простой в использовании интерфейс командной строки
- Возможность нацеливаться на все версии .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) название компании для большинства проектов!
Несколько хороших объяснений здесь: UppercuT
Вообще говоря, у меня складывается впечатление, что NAnt предлагает большую гибкость по сравнению с MSBuild, тогда как (с моими относительно простыми потребностями) я до сих пор был в порядке с последним.