MSBuild 和 F# 的 FAKE 有什麼區別?
我是 .NET 生態系統的新手,我加入了來自 Java 領域的 F#。我正試圖圍繞工具和建構過程。
我的理解是 MSBuild 是 .NET 應用程序的建構工具,它的建構配置是在 .sln 和/或 .*proj 文件中的 XML 中定義的。我假設這類似於 java 中的 pom.xml 或 build.gradle 文件是否正確?
無論如何,如果 MSBuild 是建構工具,那麼 FAKE 究竟是為了什麼?FAKE 能做什麼 MSBuild 不能做的?它只是圍繞 MSBuild 配置文件的更友好的“包裝器”嗎?
編輯:
我看到了一個名為Ionide 和 F# 開源環境狀態的影片,在其中,主要展示者提供了一個原因,為什麼 .*proj 文件至少在 VSCode 中仍然需要。以下不是直接引用,但在接近尾聲時,他說了類似的話
在與編譯器通信和讓您的程式碼工作方面,根本不需要 MSBuild 系統。我們還不能完全將其拉出的唯一原因是因為 F# 編譯器服務——它提供工具提示資訊、某些類型的類型檢查等——取決於項目文件,但我們正在努力擴展它以便它可以使用不同類型的格式。
好吧,Fake 的想法是建構不僅僅是編譯。典型的 Fake 設置將實際編譯委託給 MSBuild,並處理圍繞它的任務:執行測試、打包、部署等。雖然在技術上可以在 MSBuild 中完成這些事情,但它的 XML 語法和特性可以做到一個非常痛苦的經歷。因此,通常最好保持 .proj 純粹是聲明性的(列出源文件、引用和屬性)並使用 Fake 來描述構成建構的任務*序列,其中一項任務是呼叫 MSBuild 來執行編譯.
至於為什麼我們仍然傾向於使用 MSBuild 作為中介,而不是直接從 Fake 呼叫編譯器,主要是因為 IDE 依賴 .*proj 作為項目描述格式,點擊“Build”時會自己呼叫 MSBuild,所以我們想要以確保從 IDE 編譯和從命令行建構之間的一致性。