什么是nAnt,作为C#开发者它对我有什么用处?

17

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

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

  • nAnt用几个词来描述是什么?
  • 我如何从中受益?

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

4个回答

15

NAnt是一个构建工具,用于构建.NET项目和解决方案(基于Java的Ant原始版本)。它还是一种基于XML的“脚本”语言,在其中您可以命令“任务”执行构建工作,包括您所说的类型以及更多的其他事情!

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

  1. 构建解决方案
  2. 运行单元测试以确保构建没有“破坏”
  3. 将Web项目部署到我们的开发服务器上
  4. 将构建打包成一个构建文件夹,以进行历史跟踪和“回滚”

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

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

最后,对于您提出的特定问题,您应该考虑以下选项之一:

  • 只需将依赖项目作为项目引用添加到Web Site解决方案中,即可自动获取DLL文件
  • 考虑创建一个PostBuild任务(查看项目属性窗口),在成功构建时执行xcopy

随着项目复杂性的增加,投资时间使用NAnt以及最终使用CCNET确实是正确的选择。您可以让CCNet监视源代码控制提交或每晚运行,并设置依赖项目,例如,如果依赖项目建立,则可以启动Web站点的构建和/或运行单元测试以查看是否有任何错误。


VS项目文件大多基于MSBuild,因此如果您使用NAnt,则必须为项目编写NAnt脚本或再次将任务委托给MSBuild。因此,直接使用MSBuild现在始终是更容易的选择。幸运的是,Mono团队已经开发了跨平台的MSBuild实现,这使得NAnt比以前不那么重要了。 - Lex Li
相反!在NAnt上投资时间是有可能出错的。MSBuild以一种更兼容VS.NET和其他几个优点的方式包含了NAnt的功能,如Kevin的答案和其他地方所列举的。在我看来,除非你必须支持遗留的NAnt构建系统,否则现在学习NAnt所花费的任何时间都是浪费时间。 - Ray Burns

13

微软(不管好坏)创造了MsBuild系统,其中项目文件(.csproj,.vbproj等)是脚本。这些.proj文件通过XML指导MsBuild系统构建项目。这基本上也是nAnt所做的。因此,通常情况下,MsBuild功能== nAnt功能。

虽然我花费的时间在MsBuild和nAnt方面要多得多,所以我不能成为真正的专家意见,但从我的经验来看,如果您正在使用Visual Studio,在构建项目方面,最好继续使用MsBuild走下去,因为它很可能已经与您的开发过程相协调。由于您几乎肯定已经在使用.proj文件(即如果您正在使用C#,则为.csproj),因此对我来说没有太多意义创建另一个生成文件:只需使用已经拥有的文件并根据需要自定义即可。除了更符合开源模式之外,我不知道nAnt在现阶段提供任何MsBuild没有的功能。

再次说明,由于我的nAnt使用经验有限,我不能确定这仍然正确,但是在我上一次使用nAnt时,完成相同任务需要使用更多语言,而MsBuild则较少,如果这仍然是事实,这将是我使用MsBuild的另一个原因。

你需要在构建后作为一个任务删除二进制文件,这是一个常见的需求,可以使用MsBuild或nAnt轻松完成。基于前述原因,我建议首先尝试MsBuild,看看它是否可行,如果不行再考虑nAnt。之所以这么说是因为如上所述,你今天已经在使用MsBuild了(MsBuild引擎也已经安装在你的电脑上),那何不顺水推舟呢?当然,如果MsBuild不能满足你的要求而nAnt可以,那就选择nAnt。但是,在现有的MsBuild(即.csproj)文件中复制文件只需要约5行xml。这里是一些来自MSDN的文档:http://msdn.microsoft.com/en-us/library/3e54c37h.aspx

之前的帖子提到了使用nAnt和CruiseControl。Cruise Control也可以轻松使用MsBuild:

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

如果你想要自动化(持续集成)构建,你可以使用CC.NET。如果你能承受费用或者是一家初创公司(通过MS BizSpark计划,你可以免费使用几年),MS Team Foundation Server也是一种选择。

我对nAnt没有任何偏见——只是根据你所提到的需求,似乎不需要它。MsBuild可以做到,而且你不需要安装任何新东西或者创建文件。你只需要在.proj文件中添加大约5行的xml条目即可。


3

MSBuild的Mono版本实现不太好。据我所知,您只能使用MSBuild编译项目,即使如此,它也无法编译设置项目 - 您实际上需要devenv来完成此操作。而从Nant开始,您可以自定义构建流程:清理源代码,更新源代码,使用NUnit、Ncover和其他任何您想到的内容进行测试。因此,在我看来,毫无疑问选择Nant。

P.S. 此外,Nant是一种非常简单易学的语言。


1

nAnt是一种自动化构建工具,源于Java的Ant。它托管在这里:http://nant.sourceforge.net/

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接