前段時間遷移.NET Core作了大量的試水和評估,今天整理一下分享給你們。大體有如下幾個部分:git
1. .NET Core的由來github
2. 爲何要遷移.NET Core數據庫
3. .NET Core3.X主要特性架構
4. .NET Standard和.NET Core框架
5. .NET Core Roadmap&版本選擇機器學習
接下來,咱們詳細展開說吧。微服務
1、.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應運而生。
2、爲何要遷移.NET Core
總結了如下幾點,你們能夠補充:
3、 .NET Core3.X主要特性
同時支持Windows和Linux、MacOS,知足不一樣開發者的需求,對於Web開發提供了ASP.NET Core, 對於經常使用數據庫訪問,提供了EF Core,對於機器學習,提供了ML.NET。你們能夠根據本身業務的須要,選擇合適的技術。
4、 .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