Fake 5提供.NET Core支援

weixin_33766168發表於2018-06-24

Fake 5在推出預覽版的數個月後於近期釋出。該新版本的.NET應用構建工具重寫了核心,做了一些內部改進,並推出了一些新特性。為更好地瞭解新版本中的改進和特性,InfoQ採訪了Fake的維護者Matthias Dittrich。

\\

InfoQ:是什麼促使您推出Fake 5版本?

\\
\

Matthias Dittrich:回顧歷史,我感覺使用Fake曾是一個巨大的負擔,尤其是使用推薦的方法時。因為開發人員必須要學會Paket、FAKE,並引入build.fsxpaket.dependenciespaket.lock等多個全域性檔案,進而Paket才能另外建立多個資料夾(例如paket-filespackages.paket等),Fake才能建立.fake資料夾。

\\

這樣的架構完全可用,因為所有這些操作背後都有其合理的原因。但這對於一些小型專案或簡單的指令碼而言無疑過於繁瑣。我認為這是妨礙人們採納Fake的一個主要考慮。

\\

在.NET Core推出之後,我們得以拋棄過去對.NET的所有認知。開發人員可以釋出一個獨立的應用,無需依賴於任何已安裝的.NET Framework。我感覺到,當前正是重新考慮已有方法的一個很好機會。我開始逐步引導並使用.NET Core移植去實現Fake。當然,我們最終也必須要這樣做。

\\

由此,釋出Fake 5的目標主要上是解決上面提及的問題,允許開發人員選擇性退出(opt-out)到一種更為簡單的工作流。此外,Fake 5還要解決其它一些長期以來一直存在的突出問題,例如API的清理和統一,以及分解為更小的模組。

\\

有人曾為單一專案貢獻了一種稱為FakeLib的新功能,該軟體庫已經發展了5到10年!可能在人們毫不知情的情況下,我們已經蓄勢待發。

\\

另一方面,這意味著任何人在每次構建時都需要做全部關聯項下載。其中一些關聯項,我們並不知道如何在不破壞整個生態系統的情況下進行修復。這個問題應該如何解決?我們現在另闢蹊徑了。

\
\\

InfoQ:現在開發人員可以通過建立自定義模組擴充套件Fake。您能詳細介紹一下其工作機制嗎?

\\
\

Dittrich: 當然。事實上,這(從使用者角度看)非常簡單。開發人員所需要做的,僅是在任一NuGet源上釋出一個.NET(或者C#、F#等)軟體庫,並在自己構建指令碼的頭部使用Paket語法引用該軟體庫。

\\

唯一要滿足的需求,就是該軟體庫應相容NetStandard 2.0。

\\

舉個例子。如果我安裝了.NET SDK、建立了一個名為testfakelib的新資料夾、執行了dotnet new classlib \u0026amp;\u0026amp; dotnet pack命令,並上傳bin/Debug/testfakelib.nupkg檔案到NuGet,那麼這時我就完成了準備工作。

\\

技術上講,我們在後臺使用Paket完成繁瑣的傳遞依賴關係解析,並用於發現Fake/F#指令碼編譯和執行所需的正確dll檔案。雖然這有點過分簡化了,但至少不會讓使用者百無聊賴。

\
\\

InfoQ:該版本的主要特性或改進是什麼?

\\
\

Dittrich:在我看來,Fake 5的最主要特性如下:

\\
  • \\t

    無論開發人員當前使用何種環境,無論他們選擇了何種Fake引導或安裝方式,上手工作都更為容易。

    \\t\\t
  • \\t

    FAKE現在更適用於指令碼和小型自動化(我們進一步“擴充套件”了構建功能)。

    \\t\\t
  • \\t

    開發人員現在可以引入更廣泛的NuGet生態系統,實現構建的擴充套件,也易於自身的擴充套件。

    \\t\

但是做出選擇依然並非易事。例如,大量來自於社群的幫助正在實現API的清理和模組化。我認為,這些工作的結果值得稱讚。

\\

問題在於,我們不可能從一開始就做到完美無瑕。

\\

藉助於模組化系統,我們希望能建立更好的模組改進,並在不破壞任何系統的情況下隔離舊模組。

\
\\

InfoQ:為實現支援.NET Core,您做了哪些改進?

\\
\

Dittrich:事實上,我並不認為我們必須做的大量工作,僅是為了支援.NET Core。我們只是利用了現有的機會。技術上講,尤其是自NetStandard 2.0推出後,我們大概僅是重新編譯了大部分程式碼。其中的工作乏善可陳。

\
\\

Fake官方網站上提供了更多的詳細資訊,其中包括Fake 5發行說明

\\

檢視英文原文: Fake 5 Brings .NET Core Support

相關文章