最好的.NET构建工具

ala*_*anl 41 .net nant build-process

可能重复:
NAnt或MSBuild,哪一个可以选择?

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

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

Pet*_*yer 28

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

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


Jam*_*mie 18

我只想把FinalBuilder投入到混音中.这不是免费的,但是如果你厌倦了编辑XML文件并想要一个更好的(IMO)环境来工作,我会试一试.

我和他们一起工作过,总是回到FinalBuilder.

  • 来自我的+1.毫无疑问,FinalBuilder*是一个很棒的工具. (2认同)

Lee*_*Lee 8

我完全使用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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

ItemGroup是发现树中所有.csproj文件的逻辑发生的地方.

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


小智 8

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

http://nubuild.codeplex.com/

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

  • 非常好的信息,谢谢:) (2认同)