Подтвердить что ты не робот

Лучший инструмент построения .NET

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

http://nubuild.codeplex.com/

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

Ответ 4

Я использую MSBuild полностью для создания. Вот мой общий MSBuild script, который ищет дерево для файлов .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>

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

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

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

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

http://projectuppercut.org/

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