.NET的最佳构建工具是什么?
14 回答
我们实际上将NAnt和MSBuild与CruiseControl结合使用。NAnt 用于脚本流控制,调用 MSBuild 编译项目。触发物理构建后,NAnt 用于将单个项目构建输出发布到共享位置。
我不确定这是最好的过程。我认为我们中的许多人仍在寻找出色的构建工具。我最近在 .NET Rocks第 362 集听到的一件很有希望的事情是James Kovac 的 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>
(对不起,如果它有点密集。Markdown 似乎正在剥离空白行。)
这很简单,但一旦您了解了概念并且所有依赖项都会自动处理。我应该注意到我们使用 Visual Studio 项目文件,其中内置了很多逻辑,但是这个系统允许人们在 Visual Studio IDE 或命令行中几乎相同地构建,并且仍然可以灵活地添加东西到您在上面脚本中看到的 xUnit 测试等规范构建。
一个 PropertyGroup 是所有配置发生的地方,并且可以自定义事物,例如从构建中排除某些项目或添加新的测试程序集掩码。
ItemGroup 是查找树中所有 .csproj 文件的逻辑所在。
然后是大多数熟悉 make、nAnt 或 MSBuild 的人应该能够遵循的目标。如果调用 Build 目标,它会调用 __Compile、__Deploy 和 __Test。Clean 目标对所有项目文件调用 MSBuild 以清理其目录,然后删除全局部署目录。Rebuild 调用 Clean 然后 Build。
还有另一个名为NUBuild的新构建工具(一个非常智能的包装器) 。它是轻量级的、开源的并且非常易于设置,并提供几乎无接触的维护。我真的很喜欢这个新工具,我们已经将它作为我们持续构建和集成项目的标准工具(我们有大约 400 个项目,涉及 75 个开发人员)。试试看。
- 易于使用的命令行界面
- 能够针对所有.NET Framework 版本,即 1.1、2.0、3.0 和 3.5
- 支持基于 XML 的配置
- 支持项目和文件引用
- 为给定项目自动生成“完整的有序构建列表”——无需接触维护。
- 检测和显示循环依赖的能力
- 执行并行构建 - 自动决定生成的构建列表中的哪些项目可以独立构建。
- 处理代理程序集的能力
- 为构建过程提供视觉线索,例如,显示“已完成百分比”、“当前状态”等。
- 以 XML 和文本格式生成详细的执行日志
- 与CruiseControl.NET持续集成系统轻松集成
- 面向 2.0 + 版本时可以使用自定义记录器,如 XMLLogger
- 解析错误日志的能力
- 能够将构建的程序集部署到用户指定的位置
- 能够将源代码与源代码控制系统同步
- 版本管理能力
耙子和长鳍金枪鱼是一个很好的组合。Ruby 的强大功能,没有 XML。
.NET 开源 5 - 使用 Rake 和 Albacore 实现 .NET 自动化,作者 Liam McLennan [Tekpub.com]
我们使用 MSBuild,因为我们从 Visual Studio 2005(现在的 Visual Studio 2008)开始,并且 MSBuild 已经“内置”到 SDK - 构建服务器上的维护较少。这是一个 NAnt 克隆,真的 - 这两个工具都非常灵活,因为它们允许您在代码中创建自定义构建任务,并且都已经创建了一组体面的社区构建任务。
我们正在使用Bounce,这是一个在 C# 中用于更清晰的构建脚本的框架。
我使用商业软件Automated Build Studio进行构建。
我都使用过,并且更喜欢NAnt。我真的很难说一个比另一个“更好”。
这也取决于您要构建的内容。MSBuild SDC 任务库有几个特殊任务。例如,对于AD、BizTalk等。
该库中包含 300 多个任务,包括以下任务:创建网站、创建应用程序池、创建 ActiveDirectory 用户、运行FxCop、配置虚拟服务器、创建 zip 文件、配置COM+、创建文件夹共享、安装到 GAC、配置SQL Server , 配置 BizTalk 2004 和 BizTalk 2006 等。
使用 Python、BOO、Ruby 等动态脚本语言来创建和维护构建脚本可能是替代 NAnt 等基于 XML 的一种很好的替代方案。(它们往往比 XML 更易于阅读。)
一般来说,我的印象是 NAnt 与 MSBuild 相比提供了更大的灵活性,而(根据我相对简单的需求)到目前为止,我对后者很好。
我用过 MSBuild 和 NAnt,我更喜欢 MSBuild,主要是因为它默认需要的配置要少得多。尽管您也可以使事情变得过于复杂并使用大量配置垃圾来加载 MSBuild,但最简单的情况是,您可以将其指向解决方案/项目文件并让它运行,大多数情况下,大多数情况下是足够。
UppercuT 使用 NAnt 来构建,它是非常容易使用的构建框架。
自动化构建就像 (1) 解决方案名称,(2) 源代码控制路径,(3) 大多数项目的公司名称一样简单!
这里有一些很好的解释:Uppercut