前陣子開始體驗 .NET Core 開發後,最常面臨的問題多是某個慣用 .NET 基本元件、第三方程式庫是否在 .NET Core 能繼續使用。此時就能明顯看出西瓜偎大邊效應,常用、熱門、活躍的程式庫,跟隨新平台、新技術的腳步會比較快,某些冷門或開發社群已不再投入的程式庫,平台切換之際可能就是說再見的時刻,將留在港邊目送你航向大海。(所以選擇第三方程式庫時採取「拿香跟著拜」策略是道理滴)
上次提到,我常用的 Json.NET、NLog 都已支援 .NET Core。Json.NET 隨裝隨用沒遇到什麼問題;而 NLog 官網列舉的支援平台已包含 .NET Core,但 NuGet 下載最新版 NLog 4.4.9 時卻出現不相容 netcoreapp1.1 的錯誤訊息:
Restoring packages for X:\MySrc\WebStatusAlarm\WebStatusAlarm.csproj...
Package NLog 4.4.9 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package NLog 4.4.9 supports:
- monoandroid10 (MonoAndroid,Version=v1.0)
- net35 (.NETFramework,Version=v3.5)
- net40 (.NETFramework,Version=v4.0)
- net45 (.NETFramework,Version=v4.5)
- sl4 (Silverlight,Version=v4.0)
- sl5 (Silverlight,Version=v5.0)
- wp8 (WindowsPhone,Version=v8.0)
- xamarinios10 (Xamarin.iOS,Version=v1.0)
One or more packages are incompatible with .NETCoreApp,Version=v1.1.
Package restore failed. Rolling back package changes for 'WebStatusAlarm'.
研究後發現,NLog 從 5.0 起才加入 .NET Core 支援,而 5.0 仍在 Beta 階段。要安裝非正式版(Alpha、Beta、Preview…)的 NuGet 套件,需勾選下圖中的「Include prerelease」選項,勾選後在下拉清單即可選取 5.0.0 測試版安裝:
Clik here to view.

NLog .NET Core 的使用方式與 .NET Framework 版完全相同,原來的程式寫法與 NLog.config 設定可以一行不改直接沿用,讚!
由於 .NET Core 仍在起步階段,部分 NuGet 套件支援 .NET Core 的版本仍未正式釋出,有此經驗下回就懂得查詢測試版,必要時先裝測試版搶先。
【後記】下圖是安裝 NLog 時,NuGet 列舉需一併安裝的 CoreFx NuGet 套件,傳統上直覺屬於 Framework 內建的 System.Collections.Sepcialized、System.ComponentModel.Primitives、System.Data.Common 變成獨立 NuGet 套件,突顯 .NET Core 將 Framework 模組化套件化的設計哲學,發揮用多少裝多少的特性,也是它得以輕量化提高效能的關鍵吧?
Clik here to view.

值得一提的是,上述的每一個 System.* 程式庫,你都可以在 Github上找到原始程式,找到 Bug 或想到改進的點子,還可以提交修改建議給開發團隊,十多年前學習 C# 時,完全料想不到 .NET 會發展成今天的模樣,哈!
Clik here to view.

Clik here to view.
