MSBuild和F#的FAKE之间有什么区别?

时间:2017-03-25 20:20:20

标签: .net build f# msbuild f#-fake

我是.NET生态系统的新手,并且正在使用来自Java-land的F#。我试图围绕工具和构建过程。

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

无论如何,如果MSBuild是构建工具,那么FAKE到底是什么?什么可以做那个MSBuild不能做到的?它只是一个更友好的包装'围绕MSBuild配置文件?

编辑:

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

  

在与之通信方面根本不需要MSBuild系统   编译器并使您的代码工作。我们无法做到的唯一原因   toally把它拉出来是因为F#编译器服务 - 哪个   提供工具提示信息,某种类型的类型检查等 - 取决于   项目文件,但我们正在努力扩展它   可以使用不同类型的格式。

1 个答案:

答案 0 :(得分:16)

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

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