.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

 

  

   

posted @ 2019-10-03 08:07 Eric zhou 閱讀(...) 評論(...) 編輯 收藏
手机投注彩票合法吗