MSBuild是什么?何时需要它?

53

我好像错过了MsBuild 101的第一天。我现在想问 "它是用来做什么的,它替代了什么,我什么时候需要使用它?",因为我可以直接按F5编译我的应用程序。

我缺少的是更大的图片吗?


8
当你按下 F5 编译你的应用程序时,VS 会调用 msbuild;msbuild 是 F5 的实现细节。 - Eric Lippert
这也是大多数CI/CD平台构建在Visual Studio中创建的.NET Framework项目的方式。 - FilBot3
当我构建或按下"F5"时,我需要将一些文件复制到特定位置:我使用MsBuild和一小段xml来实现这个功能。 - undefined
5个回答

69

MSBuild 是构建平台,它使得在 Visual Studio 中所有的构建活动都成为可能。

一个更好、更实际的例子是:

  1. .csproj 文件(每个 C# 项目)都是 msbuild 文件。

  2. 当你按下 F5 键时,你基本上(过于简化地说)调用了 msbuild.exe 并传递了你的 .csproj 文件。

MSBuild 赋予了所有让“按下 F5”起作用的事情的能力。从创建“debug”或“release”文件夹,到将引用放入 bin\ 目录,再到调用 CSC...以及中间的所有内容... MSBuild“驱动”着这一切。

如果你需要的只是 F5 给您提供的输出,那么您大概已经知道了有关 MSBuild 的所有信息。

然而,在大多数商业/实际的开发场景中,总会出现需要自定义构建过程的情况。最常见的方法是自动化构建过程(使用 TeamBuild 或一些自己开发的系统)。您还可能需要

  • 创建“打包”部署
  • 链接到项目外的另一个库,该库也在积极开发中
  • 将您的构建发布到 FTP 并向客户发送电子邮件以通知其可用性。

使用一个统一且可扩展的构建平台(即 MSBuild)使所有这些都成为可能,同时仍然属于构建过程...保持开发流水线中“构建”部分简单且易于管理。


这也是大多数CI/CD平台构建在Visual Studio中创建的.NET Framework项目的方式。 - FilBot3

2
当你想要进行自动化构建并且必须实现构建过程时,它非常有用。请阅读The F5 Key Is Not a Build Process及其中的链接(例如这个),对此非常有帮助。
另外,你的Visual Studio项目文件是msbuild文件。如果你想在构建时做更高级的事情(例如运行JavaScript缩小器、对自动生成的版本标识符进行更多控制、对文件进行后处理等),你需要深入了解msbuild。

1

我知道这个话题已经有点老了,但是我想谈一下我的看法。

MSBuild是一个可编写脚本的构建工具,与ANT非常相似。它们都使用XML进行配置,因此您很快就能理解它们。两者都有“目标”概念,例如,思考方式上有很多相似之处,如果您了解ANT,那么转换应该不难。

从Visual Studio生成的MSBuild文件就像从Eclipse获取的生成项目构建、记住包含和定义依赖项的ANT脚本一样。您可以直接修改它们以达到自己的目的。

我喜欢MSBuild,它修复了我发现ANT令人烦恼的一些问题。


我也没有使用过ANT。但是,我对make非常熟悉。那么,我可以认为msbuild和ANT与Linux中的make实用程序类似吗? - Darshan L

1

当您想要从命令行构建项目时,可以使用msbuild。每当您看到一个连续集成产品会自动构建您的项目时,它将调用msbuild来执行实际的构建步骤。


1
MSbuild确实使用csc,但它也可以做其他事情。这是微软的NANT。 - nportelli
编译代码并不是一切 - 如果你想运行测试、发送测试结果、归档构建产物等,还有很多事情需要做。 - dsolimano
使用“csc”时,您必须构建非常长的命令行参数列表,以编译所有文件。而使用“msbuild”,您只需传递项目文件或解决方案文件即可。然后它将遵循您已经通过Visual Studio定义的所有构建选项。 - David

0
我认为构建服务器应该以比通过Windows API更简单的方式按F5键。

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