最好的.NET构建工具

时间:2008-08-19 17:02:48

标签: .net build-process nant

  

可能重复:
  NAnt or MSBuild, which one to choose and when?

.NET的最佳构建工具是什么?

我目前使用NAnt,但仅仅因为我有Ant的经验。是MSBuild首选吗?

14 个答案:

答案 0 :(得分:28)

我们实际上使用NAntMSBuildCruiseControl的组合。 NAnt用于脚本流控制并调用MSBuild来编译项目。触发物理构建后,NAnt用于将各个项目构建输出发布到共享位置。

我不确定这是最好的过程。我想我们中的许多人仍然在寻找一款出色的构建工具。我最近在.NET Rocks上发现的一个有希望的事情是episode 362James Kovac's PSake,一个完全基于PowerShell的构建系统。这听起来很有希望,因为你可以用PowerShell做的事情在理论上是相当无限的。

答案 1 :(得分:18)

我只想把FinalBuilder扔进去。这不是免费的,但是如果你厌倦了编辑XML文件并想要一个更好的(IMO)环境来工作,我会试一试。

我和他们一起工作过并且总是回到FinalBuilder。

答案 2 :(得分:8)

还有另一个名为 NUBuild 的新构建工具(一个非常智能的包装器)。它重量轻,开源,非常易于安装,几乎不需要维护。我非常喜欢这个新工具,我们已经将它作为我们项目持续构建和集成的标准工具(我们在75个开发人员中拥有大约400个项目)。尝试一下。

http://nubuild.codeplex.com/

  • 易于使用的命令行界面
  • 能够定位所有.NET框架 版本,即1.1,2.0,3.0和3.5
  • 支持基于XML的配置
  • 支持项目和文件 参考
  • 自动生成“完成 有序的构建列表“给定的 项目 - 无需维护。
  • 能够检测和显示 循环依赖
  • 执行并行构建 - 自动决定哪个 生成的构建列表中的项目 可以独立建造。
  • 处理代理程序集的能力
  • 为构建提供可视线索 过程,例如,显示“%completed”, “现状”等。
  • 生成详细的执行日志 XML和文本格式
  • 轻松集成 CruiseControl.NET连续 整合系统
  • 可以使用XMLLogger之类的自定义记录器 在定位2.0 +版本时
  • 能够解析错误日志
  • 能够将构建的程序集部署到 用户指定的位置
  • 能够同步源代码 与源控制系统
  • 版本管理功能

答案 3 :(得分:7)

我完全使用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>

(对不起,如果它有点密集.Markdown似乎正在剥离空白行。)

虽然理解了概念并且所有依赖项都是自动处理的,但这很简单。我应该注意到我们使用Visual Studio项目文件,它们内置了很多逻辑,但是这个系统允许人们在Visual Studio IDE或命令行中几乎完全相同地构建,并且仍然为您提供添加内容的灵活性您可以在上面的脚本中看到的xUnit测试中的规范构建。

一个PropertyGroup是所有配置发生的地方,可以自定义内容,例如从构建中排除某些项目或添加新的测试程序集掩码。

ItemGroup是发现树中所有.csproj文件的逻辑。

然后有目标,大多数人熟悉make,nAnt或MSBuild应该能够遵循。如果调用Build目标,则调用__Compile,__Deploy和__Test。 Clean目标在所有项目文件上调用MSBuild,以便清理它们的目录,然后删除全局部署目录。重建调用Clean然后Build。

答案 4 :(得分:4)

Rake和长鳍金枪鱼是一个很好的组合。 Ruby的力量,没有XML。

.NET Open Source 5 - .NET Automation with Rake and Albacore by Liam McLennan [Tekpub.com]

答案 5 :(得分:3)

我们正在使用Bounce,一个用于C#中的清洁构建脚本的框架。

答案 6 :(得分:2)

我们使用MSBuild,因为我们从Visual Studio 2005(现在是Visual Studio 2008)开始,并且MSBuild已经“内置”到SDK中 - 构建服务器上的维护更少。这是一个NAnt克隆,实际上 - 这两个工具都是无限灵活的,因为它们允许您在代码中创建自定义构建任务,并且两者都已经创建了一组体面的社区构建任务。

答案 7 :(得分:2)

我使用商业软件Automated Build Studio来构建目的。

答案 8 :(得分:1)

我使用过两者并且更喜欢NAnt。我真的很难说一个人比另一个人“更好”。

答案 9 :(得分:1)

它还取决于您正在构建的 MSBuild SDC Task library有几项特殊任务。例如,ADBizTalk

  

包含300多项任务   该库包括以下任务:   创建网站,创建   应用程序池,创建   运行FxCop的ActiveDirectory用户,   配置虚拟服务器,创建   zip文件,配置COM+,创建   文件夹共享,安装到   GAC,配置SQL Server,   配置BizTalk 2004和BizTalk   2006等等。

答案 10 :(得分:1)

使用Python,BOO,Ruby等动态脚本语言来创建和维护构建脚本可能是基于XML的NAnt的一个很好的替代方法。 (它们比XML更易于阅读。)

答案 11 :(得分:0)

一般来说,我觉得NAnt与MSBuild相比提供了更大的灵活性,而(根据我相对简单的需求)到目前为止我对后者一直很好。

答案 12 :(得分:0)

我已经使用了MSBuild和NAnt,我更喜欢MSBuild,主要是因为默认情况下它需要的配置要少得多。虽然你可以过度复杂化并加载MSBuild,但也有很多配置垃圾,最简单的是,你可以将它指向一个解决方案/项目文件并让它在大多数情况下大多数时候都是够了。

答案 13 :(得分:0)

UppercuT使用NAnt构建,它是一个非常容易使用的Build Framework。

自动构建与(1)解决方案名称,(2)源控制路径,(3)大多数项目的公司名称一样简单!

http://projectuppercut.org/

这里有一些很好的解释:UppercuT