1. 程式人生 > >.NetCore技術研究-.NET Core遷移前的準備工作

.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