NuGet 小技巧-NLog 套件 .NET Core 支援
2 |
前陣子開始體驗 .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 測試版安裝:
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 模組化套件化的設計哲學,發揮用多少裝多少的特性,也是它得以輕量化提高效能的關鍵吧?
值得一提的是,上述的每一個 System.* 程式庫,你都可以在 Github 上找到原始程式,找到 Bug 或想到改進的點子,還可以提交修改建議給開發團隊,十多年前學習 C# 時,完全料想不到 .NET 會發展成今天的模樣,哈!
Comments
# by 林星
黑暗您好,請問Net Core是否是因應跨平台而使用的技術,若已確定使用IIS的機器,用原本MVC架構就可以了嗎?還是這二種是無法比較的?有點不是很明白微軟接下來的走向及用意是什麼? 謝謝您
# by Jeffrey
to 林星,前陣子我在專頁上剛好有一篇文摘心得「該不該升級 ASP.NET Core?」( https://www.facebook.com/darkthread.net/posts/1191926090935579 ),或許能解答你的問題? 聽起來你的情境較偏向:如果現有系統運作良好未遇瓶頸,別為了時尚砍掉重練,一定不符投資報酬率 我的很多專案也都處於類似狀況,並不會積極翻寫成 ASP.NET Core,再戰十年也很 OK。但新專案會開始評估考慮採用 ASP.NET Core(考慮的點很多,未必每個都值得換技術),反正它進可攻退可守,IIS 或 Linux 通吃。