.net - MSBuild 和 F# 的 FAKE 有什么区别?

我是 .NET 生态系统的新手,我正在加入 F#,来自 Java 领域。我正在尝试围绕工具和构建过程进行思考。

我的理解是 MSBuild 是 .NET 应用程序的构建工具,它的构建配置是在 .sln 和/或 .*proj 文件中的 XML 中定义的。我假设这类似于 java 中的 pom.xml 或 build.gradle 文件是否正确?

无论如何,如果 MSBuild 是构建工具,那么 FAKE 究竟是为了什么? FAKE 能做什么 MSBuild 不能做的?它只是围绕 MSBuild 配置文件的更友好的“包装器”吗?

编辑:

我看到了一个名为 Ionide and the State of F# Open Source Environment 的视频,并且在其中,主要演示者提供了一个原因,为什么 .*proj 文件至少在 VSCode 中仍然需要。以下不是直接引用,但在接近尾声时,他说了类似的话

The MSBuild system is not needed at all in terms of communicating with the compiler and getting your code to work. The only reason we can't toally pull it out yet is because the F# compiler service - which provides the tooltip info, certain type of type checking, etc - depends on the project file, but we're working on expanding it so it can use different types of formats.

最佳答案

嗯,Fake 的想法是构建 不仅仅是编译。典型的 Fake 设置将实际编译委托(delegate)给 MSBuild,并负责围绕它的任务:运行测试、打包、部署等。虽然在技术上可以在 MSBuild 中完成这些事情,但它的 XML 语法和特性可以做到一个非常痛苦的经历。因此,通常最好保持 .*proj 纯粹是声明性的(列出源文件、引用和属性)并使用 Fake 来描述构成构建的任务序列,其中一个任务是调用 MSBuild 来执行编译。

至于为什么我们仍然倾向于使用MSBuild作为中介,而不是直接从Fake调用编译器,主要是因为IDE依赖.*proj作为项目描述格式,点击“Build”时会自己调用MSBuild,所以我们要确保从 IDE 编译和从命令行构建之间的一致性。

https://stackoverflow.com/questions/43021516/

相关文章:

objective-c - 显示应用的构建日期

java - 什么是 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAI

c# - 如何在我的应用程序中显示上次构建的内部版本号和/或日期时间?

java - 将 Google Guava 添加到 Android 项目 - 显着减慢构建速度

build - 无法打开共享对象文件

build - 错误 : Sonar server 'http://localhost:9000'

tfs - 等待可用代理/等待请求代理

ios - 如何为 iPhone 构建 Boost-Libraries

javascript - 需要一个带有 webpack 的模块

javascript - 如果我仍然在构建时连接所有文件,我为什么要使用 require.js?