【问题标题】:What is nAnt, and how it can be useful to me as a C# developer?什么是 nAnt,它对我作为 C# 开发人员有何用处?
【发布时间】:2010-01-24 03:52:39
【问题描述】:

我总是编译我的项目,并将 dll 从依赖项目复制到 UI bin 文件夹。在每次我重新编译我的项目时使用“复制和粘贴”操作几天后,我得出结论,我需要一个可以自动对我执行此操作的工具。经过几次搜索发现这个工具是nAnt。

我搜索了如何开始使用它的信息,但我没有找到太多。 所以,我的问题是:

  • 简而言之,nAnt 是什么?
  • 我如何从中受益?

编辑:我不能只添加对依赖项项目的引用,因为它会导致循环依赖。

【问题讨论】:

    标签: c# .net visual-studio-2008 nant


    【解决方案1】:

    NAnt 是一种构建工具,用于构建 .NET 项目和解决方案(基于原始 Ant for Java)。它也是一种基于 XML 的“脚本”语言,您可以在其中订购“任务”来完成构建工作,包括您正在谈论的事物的类型——还有更多!

    我们使用 NAnt 作为我们的构建脚本工具(由 Cruise Control.NET,又名 CCNET,我们的持续集成工具在每次源代码控制签入时触发)来执行我们的自动化构建。它包括以下内容:

    1. 构建解决方案
    2. 运行我们的单元测试以确保构建没有“中断”
    3. 将我们的 Web 项目部署到我们的开发服务器
    4. 将构建压缩并存档到构建文件夹中以进行历史跟踪和“退出”

    另一个解决方案是 MSBuild,它实际上是 Visual Studio 使用的。非常相似。

    请注意:您不能使用 NAnt 的解决方案任务构建设置和部署项目(您也不能使用 MSBuild 执行此操作)。为了解决这个问题,我们开始使用命令行参数运行 devenv.com(没有 UI 的 Visual Studio)——使用 NAnt 的“exec”任务而不是内置的- 在“solution”任务中——构建整个解决方案,包括安装和部署包。我们过去也使用过 WiX 和 MSBuild...

    最后,对于您概述的具体问题,您应该只考虑以下选项之一:

    • 只需将相关项目作为项目引用添加到网站解决方案中,您就会自动获得 DLL
    • 考虑创建一个 PostBuild 任务(查看“项目属性”窗口),该任务在成功构建时执行 xcopy

    随着项目复杂性的增加,您在 NAnt 和 CCNET 上投入时间确实不会出错。您可以让 CCNet 监视您的源代码控制以进行签入或每晚运行,并且您可以设置依赖项目,例如,如果您的依赖项目构建,它可以启动您的网站的构建和/或运行单元测试看看有没有坏东西。

    【讨论】:

    • VS 项目文件大多基于 MSBuild,因此如果您使用 NAnt,则必须为项目编写 NAnt 脚本或再次将任务委托给 MSBuild。所以现在直接使用 MSBuild 总是一个更容易的选择。幸运的是,Mono 团队已经实现了一个跨平台的 MSBuild 实现,这使得 NAnt 的重要性不如以前。
    • 相反!您可能在 NAnt 上投入时间会出错。 MSBuild 以与 VS.NET 更兼容的方式包含 NAnt 的功能,并具有凯文的答案和其他地方列出的其他几个优点。在我看来,除非你必须支持旧的 NAnt 构建系统,否则现在花时间学习 NAnt 都是浪费时间。
    【解决方案2】:

    Microsoft(无论好坏)创建了一个项目文件(.csproj、.vbproj 等)作为脚本的 MsBuild 系统。这些 .proj 文件指示 MsBuild 系统通过 XML 构建项目。这本质上也是 nAnt 正在做的事情。所以,一般来说,MsBuild 功能 == nAnt 功能。

    虽然我确实在 MsBuild 和 nAnt 上花费了更多时间,所以我不能成为真正的专家意见,但根据我的经验,如果您使用 Visual Studio,这可能是一个更好的途径继续使用 MsBuild 来构建您的项目,因为它很可能已经与您的开发过程保持一致。 因为您几乎可以肯定已经在使用 .proj 文件(即,如果您正在使用 C#,则为 .csproj)它不会创建另一个构建文件对我来说很有意义:只需使用您已有的文件并根据需要对其进行自定义。我不知道 nAnt 目前提供 MsBuild 没有提供的任何东西,除了它更符合开源模式这一事实。

    再次,由于我使用 nAnt 的经验有限,我不能说这仍然是正确的,但是当我上次使用 nAnt 时,与 MsBuild 相比,完成相同的任务要冗长得多,其中,如果仍然如此,那将是我改用 MsBuild 的另一个原因。

    您需要将二进制文件作为构建后任务删除,这很常见,可以使用 MsBuild 或 nAnt 轻松完成。出于上述原因,我建议先查看 MsBuild 以了解其工作原理,然后仅在 MsBuild 不符合您的要求时查看 nAnt。我这么说只是因为如前所述,您今天已经沉浸在 MsBuild 中(您的计算机上也已经安装了 MsBuild 引擎)那么为什么不走阻力最小的道路呢?当然,如果 MsBuild 没有做你想做的事情而 nAnt 做,那么一定要走那条路。但是在现有的 MsBuild(即 .csproj)文件中复制文件将是 5 行左右的 xml。以下是 MSDN 的一些文档:http://msdn.microsoft.com/en-us/library/3e54c37h.aspx

    之前的一张海报提到了将 CruiseControl 与 nAnt 结合使用。 巡航控制也可以轻松使用 MsBuild

    http://ccnetlive.thoughtworks.com/ccnet/doc/CCNET/MsBuild%20Task.html

    因此,如果您想要自动化(持续集成)构建,您可以使用 CC.NET。 MS Team Foundation Server 是 CC.NET 的替代品,如果您可以承受成本或者是一家初创公司(通过 MS BizSpark 程序,我认为您可以免费使用几年)。

    我对 nAnt 没有任何反对意见——只是你提到的你想做的事情似乎并不需要它。 MsBuild 可以做到,你不需要安装任何新的东西,甚至不需要创建文件。 你只需要在你的 .proj 文件中做一个 5 行(大致)的 xml 条目

    【讨论】:

      【解决方案3】:

      MSBuild 的单一构建实现不是很好。另外据我所知,您只能将 MSBuild 用于编译项目,即使那样它也不会编译安装项目 - 您实际上需要 devenv。从 Nant 开始,您可以自定义构建:清理源代码、更新它们、编译它们(使用 msbuild 或 devenv)、使用 NUnit、Ncover 和任何您能想到的东西测试它们。所以在我看来,Nant 放手吧。

      附:此外,Nant 是一种非常简单易学的语言。

      【讨论】:

        【解决方案4】:

        nAnt 是一个衍生自 Java 的 Ant 的自动化构建工具。它托管在这里:http://nant.sourceforge.net/

        您可以使用它来自动构建和测试您的软件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-18
          • 2010-11-24
          • 2019-05-27
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多