I am aware there are other NAnt and MSBuild related questions on Stack Overflow, but I could not find a direct comparison between the two and so here is the question.

什么时候应该 Select NAnt而不是MSBuild?哪一个更适合做什么?NAnt是否更适合家庭/开源项目和MSBuild for work项目?这两种方法中的任何一种都有什么经验?

推荐答案

本周我做了类似的调查.以下是我能够确定的:

NAnt:

  • 跨平台(支持Linux/Mono).例如,将一个网站安装到多个目标(即Linux Apache和Windows IIS)可能很方便.
  • 95%的语法与Ant相似(当前的Ant用户或Java构建者很容易理解)
  • 与NUnit集成以作为构建的一部分运行单元测试,并与NDoc集成以生成文档.

MSBuild:

  • 内置到.NET中.
  • 与Visual Studio集成
  • 在Visual Studio中轻松开始使用MSBuild-一切都在幕后进行.如果您想深入了解,可以手动编辑这些文件.

Subjective Differences: (YMMV)

  • NAnt文档更简单一些.例如,MSBuild Task Reference列出了"Csc任务——描述Csc任务及其参数"(谢谢你的"帮助"?),vs NAnt Task Reference"csc-编译C#程序"UPDATE:我注意到MSBuild documentation已经改进,现在好多了(很可能和NATE一样).
  • 不容易理解如何直接从Visual Studio中编辑生成 script source (*proj文件).对于NAnt,我只是让Visual Studio处理这个问题.将脚本构建为XML文件.
  • 显然,在VisualStudio中,Web应用程序项目没有获得**默认情况下是proj文件,所以我很难弄清楚如何让MSBuild在我的上运行以创建部署脚本.
  • NANT不是Visual Studio内置的,必须使用外接程序或作为"外部工具"进行添加.这是一个有点痛苦的设置.
  • (编辑:)我的一位同事提出了这个问题——如果你想用CruiseControl来建立一个持续集成的构建机器,CruiseControl可以很好地与NAnt进行开箱即用的集成.UPDATE: CruiseControl还有一个MSBuild task.
  • Please see comments below for full and up-to-date discussion of subjective differences.

.net相关问答推荐

将多行参数传递给Power Shell中的DotNet Pack命令

问:在 Blazor WASM 应用程序中存储 api 密钥的最佳方式是什么?

代码访问安全是否在任何现实世界中使用?

C#.Net 中的可选返回

将字符串与容差进行比较

在 .NET 反射中使用 GetProperties() 和 BindingFlags.DeclaredOnly

.NET 的future 版本会支持 C# 中的元组吗?

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

每 X 秒执行一次指定函数

C#:内存不足异常

析构函数、dispose 和 finalize 方法的区别

什么是 ToString("N0") 格式?

设置 System.Drawing.Color 值

Moq - 不可覆盖的成员不能用于设置/验证表达式

嵌套的 Try/Catch 块是个坏主意吗?

表单不响应 KeyDown 事件

将控制台输出镜像到文件

序列化一个可为空的 int

从 Visual Studio 2015 发布 - 允许不受信任的证书

捕获控制台退出 C#