最好的.NET构build工具

可能重复:
NAnt或MSBuild,哪一个select什么时候?

什么是最好的.NET构build工具?

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

我们实际上使用了NAnt和MSBuild与CruiseControl的组合。 NAnt用于脚本stream程控制,并调用MSBuild编译项目。 在物理构build被触发之后,NAnt被用于将各个项目构build输出发布到共享位置。

我不确定这是最好的过程。 我想我们很多人仍然在寻找一个很好的构build工具。 我最近在.NET Rocks上听到的一个很有希望的事情, 第362集是James Kovac的PSake ,一个完全基于PowerShell的构build系统。 这听起来很有希望,因为你可以用PowerShell做什么在理论上是相当无限的。

我只想把FinalBuilder投入到混合中。 这不是免费的,但如果你厌倦了编辑XML文件,并希望有一个更好的( 海事组织 )环境工作,我会放手一搏。

我已经和所有人一起工作,并一直回到FinalBuilder。

还有另一个新的构build工具(一个非常聪明的包装)称为NUBuild 。 它轻巧,开源,极易安装,并提供几乎不触摸的维护。 我非常喜欢这个新工具,我们已经把它作为我们不断构build和整合项目的标准工具(我们在75个开发者中有大约400个项目)。 试试看。

http://nubuild.codeplex.com/

  • 易于使用的命令行界面
  • 能够定位所有.NET Framework版本,即1.1,2.0,3.0和3.5
  • 支持基于XML的configuration
  • 支持项目和文件引用
  • 自动为给定的项目生成“完整的订单生成列表” – 无需维护。
  • 能够检测和显示循环依赖
  • 执行并行构build – 自动决定生成的构build列表中的哪些项目可以独立构build。
  • 能够处理代理程序集
  • 为构build过程提供一个直观的线索,例如显示“%完成”,“当前状态”等
  • 生成XML和文本格式的详细执行日志
  • 轻松集成CruiseControl.NET持续集成系统
  • 定位到2.0 +版本时,可以使用XMLLogger之类的自定义logging器
  • 能够parsing错误日志
  • 能够将构build的程序集部署到用户指定的位置
  • 能够将源代码与源代码pipe理系统同步
  • 版本pipe理function

我完全用MSBuild来build造。 这里是我的通用MSBuild脚本,它search树的.csproj文件并构build它们:

<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项目文件,这些文件中embedded了大量的逻辑,但是这个系统允许人们在Visual Studio IDE或者命令行中几乎完全相同的构build,并且仍然给你添加东西的灵活性到像上面脚本中看到的xUnittesting那样的规范构build。

一个PropertyGroup是所有configuration发生的地方,可以自定义的东西,比如从构build中排除某些项目或添加新的testing程序集掩码。

ItemGroup是逻辑发生的地方,可以find树中的所有.csproj文件。

然后是大多数人所熟悉的目标,nAnt或MSBuild应该能够遵循。 如果您调用生成目标,它将调用__Compile,__Deploy和__Test。 Clean目标在所有项目文件上调用MSBuild以清理其目录,然后删除全局部署目录。 重build通话清理,然后build立。

耙子和长鳍金枪鱼是一个很好的组合。 Ruby的强大function并没有XML。

.NET开源5 – 用Rake和Albacore进行.NET自动化by Liam McLennan [Tekpub.com]

我使用商业软件Automated Build Studio进行构build。

我们使用MSBuild,因为我们从Visual Studio 2005(现在是Visual Studio 2008)开始,并且MSBuild已经内置到SDK中,所以在构build服务器上的维护较less。 这是一个NAnt克隆,实际上,这两个工具都是非常灵活的,因为它们让您可以在代码中创build自定义构build任务,并且都有一组体面的已经创build的社区构build任务。

  • MSBuild社区任务
  • NAntContrib

我们正在使用Bounce ,一个在C#中使用更简洁的构build脚本的框架。

我用过,而且更喜欢NAnt 。 说一个比另一个“好”,真的很难。

这也取决于你正在build设的东西。 MSBuild SDC任务库有一些特殊的任务。 例如,对于AD , BizTalk等

该库包含300多个任务,包括创build网站,创build应用程序池,创buildActiveDirectory用户,运行FxCop ,configuration虚拟服务器,创buildzip文件,configurationCOM + ,创build文件夹共享,安装到GAC ,configurationSQL Server ,configurationBizTalk 2004和BizTalk 2006等。

我已经使用MSBuild和NAnt,我更喜欢MSBuild,主要是因为它默认情况下需要更less的configuration。 虽然你可以使事情过于复杂,并且用很多configuration垃圾加载MSBuild,但是最简单的方法是,你可以将它指向一个解决scheme/项目文件,然后在大多数情况下,足够。

使用像Python,BOO,Ruby等dynamic脚本语言来创build和维护构build脚本可能是一个像NAnt这样的基于XML的构build脚本的很好的select。 (他们往往比XML更清洁。)

UppercuT使用NAnt来构build,使用Build Framework非常简单。

自动构build像(1)解决scheme名称一样简单,(2)源代码pipe理path,(3)大多数项目的公司名称!

http://projectuppercut.org/

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

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