瀏覽次數:2917

.NET Core的前世今生

訊光科技/蘇文瑞

 

前言

EEP.NET推出至今,已經將近15年的歷史,從最早使用.NET webform技術開始,陸續整合了extjsDevExpressSilverlightjQueryjQuery MobileAngularJS.NET MVC到最新的RWD等等各種不同框架,有些也廣受客戶好評。

這些訊光所整合在Visual Studio內的技術,都只能在Windows作業系統與Visual Studio開發工具上使用。為了要能擁有Visual Studio拉元件、設定屬性、少寫html這種開發方式的便利性,因此綁定在體積極為龐大的Visual Studio開發工具中,除了需額外購買微軟授權外,也無法跨平台開發。

     直到近兩年.NET Core的出現,即將對EEP.NET的開發方式帶來重大改變。

 

甚麼是.NET Core

.NET Core 一個由Microsoft.NET社區維護的開源通用開發平台。跨平台(支持WindowsmacOSLinux),可用於構建裝置,雲和IoT應用程序。現在已經改名為.NET5。.NET Core可用於建立如下的應用程式,例如:

.NET Core支援多種平台,如WindowsmacOSLinuxAndroidiOStvOSwatchOS等平台,支援的處理器架構包括 x64x86ARM32ARM64等。支援的語言則包含 C#F#Visual Basic等。

其中ASP.NET Core 是.NET Core的重要成員之一,他是一個跨平台的.NET框架,用於在WindowsMacLinux上構建基於雲的現代Web應用程序。由Microsoft和社區開發的免費,開放源代碼的Web框架,性能高於ASP.NET。它是一個模塊化框架,可在Windows的完整.NET Framework和跨平台的.NET Core上運行。其架構圖如下:


ASP.NET Core 具有下列優點:

但是需注意的是,.NET Core並未完整移植.NET FrameWork例如下列功能將無法在.NET 5(.NET Core的下一個版本)中使用:

特別注意的是,.NET Core 已更名為 .NET 5,版本號碼直接定義5,是為了避免與 .NET Framework 4.x 混淆。根據微軟官方說明.NET Core名稱日後不再有 "Core" 的名稱,但是ASP.NET Core則會繼續保留 "Core",以避免與 ASP.NET MVC 5 混淆,Entity Framework Core 會保留 "Core" 的名稱,以避免與 Entity Framework 5 6混淆。 而.Net Framework則已經終止開發了,最終版本為4.8

 

 

為何要用.NET Core

.NET經過多年的發展,幾乎已經成熟了,為何企業還要跟進.NET Core? 簡單說明如下:

1.        為了要能跨平台

2.        效能更好,在不少實測中優於node.js

3.        支援在嵌入式裝置廣為使用的ARM 64 CPU 在售價2000元台幣的樹莓派4上也能架設ASP.NET Core 3.0網站了

4.        ASP.NET Core支援docker,將應用程式容器化。因此也可以直接在群暉科技的NAS上運行。

5.        適合開發微服務,一句指令dotnet new webapi -o myMicroservice,就直接建立了一個微服務。

6.        ASP.NET Core支援多種網頁伺服器,不再只能搭配龐大的IIS

7.        開放原始碼,使用最寬鬆的MITApache 2開源協議,文檔協議遵循CC-BY。這將允許任何人任何組織和企業任意處置,包括使用,複製,修改,合併,發表,分發,再授權,或者銷售。

8.        新一代主流開發平台,正在不斷技術創新

9.        微軟已經結束.NET framework開發並終止更新版本,.NET framework已經成為落日技術。因此為了企業長久發展,未來勢必需要更換淘汰此技術。

 

以下我們整理出.NET Core.NET Frame有何不同,以表格方式列出兩者差異:


.NET Core的架構

先了解一下.NET Core的前身.NET Framework.NET Framework2000年提出的,之後的十多年推出了一系列的版本,目前最終版本為.NET Framework 4.8。由於不斷疊代更新,架構越來越多功能,但是另一方面也越來越臃腫,造成BCL(Base Class Libraries基礎類別庫)與負責執行階段CLR(Common Language Runtime通用語言運行庫)不斷的膨脹。如下圖:

 

CLI(Common Language Infrastructure) 是一個開放的技術規範,由為微軟、HPIntel2000年向ECMA(Ecma International)倡議的,目的是讓規範內定義的高階語言,在無需修正的情況下可以在不同電腦架構上執行。

符合CLI的程式會編譯成CIL(通用中間語言Common Intermediate Language)在執行時透過VES(Virtual Execution System)JIT(just-in-time compilation)技術編譯成Machine code(機械碼)CLR是微軟對此標準CLI的實作,我們可以.NET的虛擬機去理解CLR,以Java來說,類似JVM的概念。如下圖所示:

龐大的BCLCLR,勢必會造成效能影響,也讓跨裝置執行受限,因此微軟也推出了不同裝置版本的.NET Framework。由於各個平台的獨立性高,因此難以開發跨平台與設備的應用程式。

因此,微軟重新開發了新的CLR,稱作CoreCLR(.NET Core Common Language Runtim),並且重新設計一套新的BCL,稱作CoreFX

 

 

CoreFX是經過完全重寫的BCL,其API不再定義於少數幾個單一的程式集中,而是重新分配在各獨立的模組中,這些模組各自對應單一的程式集,最終透過對應的NuGet下載安裝。因此整體執行速度與所需的資源更少,也符合近年微服務與容器的架構趨勢。

CoreCLR設計時,就考量了主流的作業系統(WindowsMac OS XLinux)CPU架構(x86x64ARM),因此具備跨平台的功能。


.Net 5(.NET Core)的市場回響與未來

根據筆者工作上實際與台灣各中小企業、上櫃上市公司資訊部門的接觸訪談結果,台灣目前(202010)對於.Net 5,幾乎都還處於沒聽過或是觀望階段,還沒看到使用.NET 5開發出來的大型專案。可能由於之前微軟拋棄Silverlight技術、Metro UI的影響,企業不願意追新技術追得太緊。

不過,由於.Net Framework則已經終止開發了,轉換新技術勢在必行。加上微軟近年來擁抱開放原始碼、跨平台的開放態度,受到社群的正面回應。因此考量高效能與能夠在各種平台、裝置、開發場景的應用上,.NET 5勢必會取代原有的.NET Framework,只是時間早晚的問題。


相關文章