NAnt 或 MSBuild,该选择哪一个以及何时选择?

2023-11-29

我知道还有其他NAnt and MSBuildStack Overflow 上的相关问题,但我找不到两者之间的直接比较,所以这里是问题。

什么时候应该选择 NAnt 而不是 MSBuild?哪一个更适合做什么? NAnt 更适合家庭/开源项目,MSBuild 更适合工作项目吗?两者中的任何一个的体验如何?


我本周做了类似的调查。这是我能够确定的:

NAnt:

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

MSBuild:

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

主观差异: (YMMV)

  • NAnt 文档更简单一些。例如,MSBuild 任务参考列出“Csc 任务 - 描述 Csc 任务及其参数。”(感谢“帮助”?),与NAnt 任务参考“csc - 编译 C# 程序。”UPDATE:我注意到MSBuild 文档已经得到改进,现在好多了(可能与 NAnt 相当)。
  • 弄清楚如何直接从 Visual Studio 中编辑构建脚本源(*.*proj 文件)并不容易。使用 NAnt,我只需让 Visual Studio 将 .build 脚本视为 XML 文件。
  • 显然,在 Visual Studio 中,Web 应用程序项目默认情况下不会获取 *.*proj 文件,因此我很难弄清楚如何让 MSBuild 在我的项目上运行以创建部署脚本。
  • NAnt 不是内置于 Visual Studio 中的,必须使用外接程序或作为“外部工具”进行添加。设置起来有点麻烦。
  • (编辑:)我的一位同事提出了这个问题——如果你想使用巡航控制为了持续集成,CruiseControl 与 NAnt 完美集成,开箱即用。UPDATE:CruiseControl 还具有MSBuild任务.
  • 请参阅下面的评论,了解有关主观差异的完整且最新的讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NAnt 或 MSBuild,该选择哪一个以及何时选择? 的相关文章

  • 压缩未压缩的 MSI 文件

    我们有一个安装项目 它生成一个未压缩的 MSI 文件 并且根本没有 Setup exe 稍后由 NSIS 压缩 在特殊的构建设置中 我想在 NSIS 打包之前复制该 MSI 更改副本并保留它 我还想在 msbuild 创建它之后对其进行压缩
  • Equals 和 GetHashCode 方法不一致

    读完这个问题后为什么 int 和 sbyte GetHashCode 函数生成不同的值 https stackoverflow com questions 12501979 why do int and sbyte gethashcode
  • 在 Visual Studio 2010 解决方案级别定位 .NET Framework 的特定版本

    我想在我的 Visual Studio 2010 解决方案中同时针对 NET 3 5 和 NET 4 0 我知道我可以设置
  • 是否曾经建议使用 ECB 密码模式?

    判断从这篇关于密码模式的维基百科文章 http en wikipedia org wiki Block cipher modes of operation以及我听说过的有关 ECB 的其他事情 这是一个很大的禁忌 并且可能会泄露有关您的加密
  • 主动解决方案平台 VS 项目平台 VS 目标平台

    我希望我的应用程序是针对 x64 构建的 因为我使用的是 x64 dll 在配置管理器中 我已将 活动解决方案平台 设置为 x64 但是在项目列表中平台设置为 x86 项目属性中的 平台目标 也设置为 x86 我完全困惑有三个地方可以设置目
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 标准 .NET 库是否依赖于任何非托管 DLL?

    只是出于好奇 NET 框架本身在访问标准库时是否依赖于任何非托管 DLL 例如 我调用方法 A 并且 在幕后 方法 A 或该方法 A 内的任何其他方法对非托管 DLL 执行 PInvoke 是的 Net 库大量使用非托管函数 库可以调用两种
  • 从 .NET 文本中提取关键字

    我需要计算每个关键字在字符串中重复出现的次数 并按最高次数排序 NET 代码中用于此目的的最快算法是什么 编辑 下面的代码将唯一标记与计数分组 string target src Split new char var results tar
  • 该进程无法访问该文件,因为该文件正在被另一个进程使用

    当我从 bat 文件启动 net 控制台应用程序时 例如start myapp exe 然后 myapp exe 尝试将文件写入其当前目录 尽管我收到 net 运行时错误 声称该文件正在被另一个应用程序使用 没有其他应用程序在运行 http
  • 如果我使用带有表单身份验证的 WCF,php 或 java 客户端将如何进行身份验证?

    我有一个通用的概念验证 WCF 服务 它使用表单身份验证来保护访问 当我的客户端是 NET 时 一切都很好 vb 代码如下 Dim client As SupplierServiceClient New SupplierServiceCli
  • 使用 TFS API 在单个查询中检索工作项及其链接的工作项

    有谁知道是否可以检索工作项目及其列表链接的工作项使用 TFS API Web 服务从 TFS 进行一趟 目前 我们必须对第一次调用期间进行的每个工作项进行第二次调用 并且引入了性能问题 如果这不可能 是否有办法查看链接工作项的类型而不检索它
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • 将参数传递给模板类型的 C# 泛型 new()

    添加到列表时 我试图通过其构造函数创建一个 T 类型的新对象 我收到编译错误 错误消息是 T 创建变量实例时无法提供参数 但我的类确实有一个构造函数参数 我怎样才能做到这一点 public static string GetAllItems
  • 在不可变类型的构造函数中生成HashCode

    我对不可变类型的 HashCode 有一些疑问 我可以在构造函数中 预 生成不可变类型的 HashCode 还是有任何理由不这样做 当调用 GetHashCode 方法时 我是否应该再次生成哈希码 这是一个示例类 public class
  • .NET PInvoke 可以从用户指定的目录动态加载本机 dll 吗?

    我有一个 NET 应用程序 需要加载一个本机库 其位置由用户指定 PInvoke 看起来只会从全局搜索路径 或编译时指定的路径 加载 最好的方法是创建一个在运行时调用 LoadLibrary 的 C CLI 程序集吗 C CLI 会比 C
  • WCF获取证书编码值

    我在 WCF 服务中使用证书 因此在 web Config 中有一个编码值
  • 如何为 Visual Studio 命令提示符创建批处理文件

    我想创建一个批处理文件Visual Studio 2008 x64 Cross Tools Command Prompt要在我的电脑上连续执行某些操作 场景如下 svn update delete some files MSBuild My
  • .net 中的计时器合并

    Windows 7 引入了计时器合并 提高了能源效率 哪些托管 API 公开了计时器容差 似乎利用此功能的唯一方法是 p invoke设置等待定时器 http msdn microsoft com en us library windows
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我

随机推荐

  • 如何在Linux中使用addr2line命令?

    我试图在 Unix 中使用 addr2line 命令 但每次它都会给出与 0 相同的输出 我发出命令为addr2line e a out 0x4005BDC 我在运行这个 a out 可执行文件时得到了这个地址valgrind查找内存泄漏的
  • MathJax 未在 Sphinx 中呈现

    我在 Sphinx Rest 中有一个文档集 我已将 sphinx ext mathjax 包含在 conf py 中 并包含行 mathjax path http cdn mathjax org mathjax latest MathJa
  • 在上一个命令失败后创建带有红色 $ 的 Bash 命令提示符

    我是 Bash 编程新手 我正在努力创建一个自定义 Bash 命令提示符 我的目标是创建一个提示 仅在登录名和主机名与我通常使用的不同时显示它们 当位于 Git 版本控制下的目录中时 我还希望将当前的 Git 分支附加到命令提示符 我想将登
  • Android:查找动态创建的视图的ID

    我有以下问题 在 Android Studio 中我生成 enEditText动态地当ExerciseButton被点击 public void exerciseButtonClick View view EditText exercise
  • 在 Vertex AI 用户管理笔记本启动时公开现有环境的内核

    这是一个延续这个线程 发布在这里 因为它太复杂 无法发表评论 TL DR 在 Vertex AI 用户管理笔记本中 如何通过重复的停止和启动周期保留存储在数据磁盘上的现有 venv 以及 conda 如果可能 环境的公开内核图标 Detai
  • 为什么 scrapy xpath 函数不支持 'matches()' 语法?

    我正在运行 scrapy 0 20 2 scrapy shell http newyork craigslist org ata 我想列出广告页面的所有链接 并将其与index html分开 sel xpath a contains hre
  • 我可以配置 Hibernate/JPA 在仅修改非时间戳字段时更新实体记录吗?

    目前我有一个 Hibernate 实体类 如下所示 Entity Table name entity public class Entity implements Serializable private static final long
  • Elixir 到 Erlang 的转换

    我想看看当 Elixir 转换成 Beam 文件时会发生什么 有没有办法在控制台或文件中打印它的翻译方式 我想知道这个模块在 erlang 中是什么样子的 我在想是否有 Elixir 的调试模式 它会输出以上任何内容 更具体地说 我有这个例
  • PHP:oci_bind_by_name 和时间戳字段导致“ORA-01461:只能绑定 LONG 值以插入 LONG 列”

    我有一个 Oracle 数据库 需要将包含 YYYY MM DD HH MM SS 格式的日期的字符串插入 Oracle 时间戳字段中 为此我写了这段代码 date 2013 01 01 10 10 10 sql oci parse c I
  • 使用 nlm 函数进行多变量优化

    nlm 函数可以用于多变量优化吗 那会如何运作呢 例如 我想找到 x 和 y 以使 f x y 最小化 nlm 函数如何工作 类似的东西 nlm f c 0 1 0 1 创建一个接收向量的函数 f lt function X x lt X
  • 如何使用请求访问此类网站? [复制]

    这个问题在这里已经有答案了 这是我第一次遇到不允许我访问网页的网站 我不知道为什么 也不知道如何从这个网站上抓取 我的尝试 import requests from bs4 import BeautifulSoup def html url
  • nasm 系统调用 Linux

    我有一个关于汇编中的 linux x86 系统调用的问题 当我在 Linux 上使用 nasm 创建新的汇编程序时 我想知道必须使用哪些系统调用来执行特定任务 例如读取文件 写入输出或简单的退出 我知道一些系统调用 因为我读过它们在互联网上
  • 如何使用 PuTTY/Plink 在 Windows 批处理文件中的设备上顺序执行多个命令?

    我正在尝试使用 SSH 以自动化方式配置设备 bat脚本 在下面的代码片段中 我以正确的顺序生成一个包含所需命令的文件 然后使用 SSH 连接执行 读取该文件plink 这会导致一条错误消息 命令未知 我认为这是由于命令不是逐一执行而是插入
  • 如何按键对对象数组进行分组?

    如何通过对象键对对象数组进行分组 以根据分组创建新的对象数组 例如 我有一系列汽车对象 const array red height 50 green height 20 blue height 30 blue height 40 red
  • 以值为条件对列运行求和

    我有一个二进制变量向量 用于说明该产品是否在该期间促销 我正在尝试弄清楚如何计算每次促销的持续时间以及促销之间的持续时间 promo flag c 1 1 0 1 0 0 1 1 1 0 1 1 0 换句话说 如果promo flag与上一
  • npm test --codecoverage 不生成报告

    不知道为什么当我击中时 npm test codecoverage 所有测试都正在执行 但是我看到一个空的 coverage 文件夹 没有任何报告 我用角度 cli 我做错了什么 如果您全局安装了 CLI 则命令为 ng test code
  • 无法通过下载 URL 检索文件内容

    大约一个小时以来 我无法通过下载 URL 属性检索文件内容 每次我尝试获取它时 API 都会回答 401 未经授权的错误 这是使用的代码 https gist github com arnaudbreton 5409015凭证存储在 GAE
  • 表单提交结果后使用 php 代码打开新窗口

    这是我一直在编写的脚本 它应该集成用户并在打开时通过 我这样做对吗 我想在用户将表单提交到 php 代码后打开一个弹出窗口 但我总是收到错误 将您的代码更改为此
  • 尝试快速保存捕获的图像时出错

    在我的项目中 我正在捕捉图像 但是当它开始保存图像时 应用程序崩溃并出现以下错误 打开包装时意外发现零 我的代码如下 Library Assets var assetCollection PHAssetCollection var phot
  • NAnt 或 MSBuild,该选择哪一个以及何时选择?

    我知道还有其他NAnt and MSBuildStack Overflow 上的相关问题 但我找不到两者之间的直接比较 所以这里是问题 什么时候应该选择 NAnt 而不是 MSBuild 哪一个更适合做什么 NAnt 更适合家庭 开源项目