我总是编译我的项目,并将依赖项目的dll复制到UI bin文件夹中。经过几天的“复制粘贴”操作后,每次重新编译我的项目,我得出结论需要一个工具自动执行此操作。经过一些搜索,我发现这个工具叫做nAnt。
我搜索了一些如何开始使用它的信息,但没有找到太多。所以,我的问题是:
- nAnt用几个词来描述是什么?
- 我如何从中受益?
编辑:我不能只添加对依赖项项目的引用,因为这会导致循环依赖。
我总是编译我的项目,并将依赖项目的dll复制到UI bin文件夹中。经过几天的“复制粘贴”操作后,每次重新编译我的项目,我得出结论需要一个工具自动执行此操作。经过一些搜索,我发现这个工具叫做nAnt。
我搜索了一些如何开始使用它的信息,但没有找到太多。所以,我的问题是:
编辑:我不能只添加对依赖项项目的引用,因为这会导致循环依赖。
NAnt是一个构建工具,用于构建.NET项目和解决方案(基于Java的Ant原始版本)。它还是一种基于XML的“脚本”语言,在其中您可以命令“任务”执行构建工作,包括您所说的类型以及更多的其他事情!
我们使用NAnt作为我们的构建脚本工具(由Cruise Control.NET触发,在每次源代码控制提交时触发,这是我们的持续集成工具),用于执行自动化构建。它包括以下内容:
另一个解决方案是MSBuild,它实际上是Visual Studio使用的工具,非常类似。
请注意:您无法使用NAnt的solution任务(也无法使用MSBuild)来构建设置和部署项目。为了解决这个问题,我们开始使用带有命令行参数的devenv.com (没有UI的Visual Studio)--使用NAnt的“exec”任务而不是内置的“solution”任务--来构建整个解决方案,包括设置和部署包。我们过去还使用过WiX和MSBuild...
最后,对于您提出的特定问题,您应该考虑以下选项之一:
随着项目复杂性的增加,投资时间使用NAnt以及最终使用CCNET确实是正确的选择。您可以让CCNet监视源代码控制提交或每晚运行,并设置依赖项目,例如,如果依赖项目建立,则可以启动Web站点的构建和/或运行单元测试以查看是否有任何错误。
微软(不管好坏)创造了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条目即可。
MSBuild的Mono版本实现不太好。据我所知,您只能使用MSBuild编译项目,即使如此,它也无法编译设置项目 - 您实际上需要devenv来完成此操作。而从Nant开始,您可以自定义构建流程:清理源代码,更新源代码,使用NUnit、Ncover和其他任何您想到的内容进行测试。因此,在我看来,毫无疑问选择Nant。
P.S. 此外,Nant是一种非常简单易学的语言。