.NetCore技術研究-.NET Core遷移前的準備工作
前段時間遷移.NET Core做了大量的試水和評估,今天整理一下分享給大家。大致有以下幾個部分:
1. .NET Core的由來
2. 為什麼要遷移.NET Core
3. .NET Core3.X主要特性
4. .NET Standard和.NET Core
5. .NET Core Roadmap&版本選擇
接下來,我們詳細展開說吧。
一、.NET Core的由來
這個更像是科普的資料,因為團隊的小夥伴有半路出家的,對.NET 的光輝歷史不是非常瞭解,所以有必要帶著大家看一遍.NETCore的由來:
說.NET Core,需要先說一下.NET. 當年Java剛剛興起,如火如荼,微軟也非常推崇Java,當時Windows平臺的Java虛擬機器就是微軟按照JVM標準實現的,據說也是當時效能最好的Java虛擬機器。但是微軟也是有私心的,微軟總想搞點Windows平臺上的特性,有點想把Java繫結到Windows平臺上的味道,另外Sun公司確實有點小心眼,於是Sun公司就跟微軟鬧掰了,然後微軟就推出了 .NET,.NET從出生開始其實就借鑑了Java,然後又一步步在語言特性、窗體開發等方面實現了超越。Java在1.6版本以後發展緩慢,後面Java也在語言特性上借鑑了 .NET。
.NET雖然一直髮展的不錯,也有WPF、Unity3D這樣具有競爭力框架的出現。但是.NET平臺在一些較大的專案,不太受網際網路公司的喜愛(雖然京東、噹噹、攜程當年也是.NET技術路線)。但是因為.NET不是開源的框架,也不是可跨平臺的框架,那就會帶來以下問題:
成本:選擇.NET就要選擇Visual Studio,Windows Server,license是不可忽視的成本;
生態:沒有來自於社群的貢獻,那.NET沒有誕生優秀框架的土壤,技術社群雖然有微軟的特殊扶持,但是整體不太理想
人才:無法吸引一線公司優秀網際網路工程師加入,因為他們用Java、Go等,但是.NET Core誕生之後會大為改觀,騰訊、網易都有在使用。
縱使有Mono這麼強大的框架,可以讓 .NET 跑在Linux上,但是這還不夠。畢竟Mono只能發揮.NET部分有限的能力。
同時,雲端計算的普及,跨平臺需求勢不可擋,Linux 作為Server的不二OS,.NET不支援Linux,比較尷尬!
另外,容器時代已經不可逆轉,跟Windows的強依賴,如何上Docker?
總之,形式所迫,擁抱變化和未來,.NET Core應運而生。
二、為什麼要遷移.NET Core
總結了以下幾點,大家可以補充:
- .NET Core代表著未來.Net的發展方向
- 產品新特性、重點技術支援微軟優先考慮在最新.NET Core版本上支援
- 更優的程式碼、更好的效能,社群大家都在貢獻、優化程式碼
- 跨平臺支援,支援部署在Linux,可以降低VM的成本
- Docker部署支援,更低的成本,更高的資源利用率,未來雲原生的核心組成
- 面向現代網際網路應用、微服務架構、和DevOps更好地整合
- 開源:https://github.com/dotnet/core
- 更好的生態和社群
三、 .NET Core3.X主要特性
同時支援Windows和Linux、MacOS,滿足不同開發者的需求,對於Web開發提供了ASP.NET Core, 對於常用資料庫訪問,提供了EF Core,對於機器學習,提供了ML.NET。大家可以根據自己業務的需要,選擇合適的技術。
四、 .NET Standard和.NET Core
先說下事情的起源:
.NET Framework從2002年起,一直在Release新版本,不支援跨平臺
.NET Core是為了支援跨平臺產生的,類似的有Mono、Xamarin
這樣,出現了兩套程式碼、兩套類庫,對於開發者來說,要同時掌握兩套SDK,會產生社群和技術的分裂。
因此,.NET 要統一類庫標準,統一所有的API定義,這就是.NET Standard. 如下圖:
.NET Standard的統一:
.NET Standard定義了.NET平臺,統一實現的一組API。實現.Net Standard API的平臺都與目標.Net Standard庫相容;
.NET Framework和.NET Core都是.NET Standard的標準實現。 .NET Standard是二者的交集。
但是.NET Framework和.NET Core存在其個性化、擴充套件的類庫,需要犧牲相容性,即:
假如用.NET Framework的個性化SDK。例如登錄檔、Windows Service、Winform,這樣只能部署在Windows中。
假如用.NET Core的個性化SDK,部署執行時,與Windows環境下.NET Framework不相容。
所以,如果應用程式採用.NET Standard,同時支援.NET Framework和.NET Core,則可以實現兩者的相容。一套程式碼既支援執行在.NET Framework執行時下,又支援執行在.NET Core執行時下。
同時.NET Standard的版本對應.NET Core、.NET Framework、Mono、Xamarin等的版本,有個對照表:
這張表非常重要。體現了一個規則:
假如程式的目標框架Targetframework 使用.NET Standard2.0, 則支援:
.NET Core 2.0版本的工程可以引用
.NET 4.6 版本的工程可以引用
但是低版本的.NET Core和.NET Framework則無法引用。
五 .NET Core Roadmap&版本選擇
先看一下.NET Core最新的Roadmap:
最新的.NET Core 3.1 將2019年11月釋出,同時是LTS版本。如果大家現在開始遷移.NET Core,建議選擇一個大版本、LTS版本。我們也將選擇這個版本。
周國慶
2019/10/03
&n