在上一篇介紹完C#之後(工程師的語言 C#),基本上對於.Net Framework的整個開發環境也是有個基本的了解和概念之後,在這篇將會對新的framework:.net core做個基本介紹。
.Net Core的組成
和.Net Framework一樣,當提到.Net Core的時候,這個平台提供了三個重要功能:
- 編譯/建制程式碼的工具
.Net core和.Net framework不同在於提供了一個所謂的
dotnet
cli工具(也可以稱為app host),這個工具提供了一個統一的api方便對專案做一些調整,並且提供像是build或者restore package的指令。dotnet
cli提供的還是一個wrapper,以compiler來說,底層其實用的也是Roslyn (.net Compiler platform)- .Net Core Base Class Library (BCL)
.Net Core和.Net Framework一樣,有提供了所謂的BCL。不過這個BCL其實從api的角度來說是少於.Net Framework,畢竟為了跨平台有些和Windows綁的很死的像是Windows Form就不包括在.Net Core的BCL。
CoreBCL也稱為CoreFx,有個github repo
- Core Common Language Runtime (CoreCLR)
- 同.Net Framework一樣,也是有個CLR用來執行.Net Core的程式,不過這個CLR和.Net Framework不同,因此稱為CoreCLR。
.Net Core和.Net Framework的不同之處
.Net Core基本上是.Net Framework的重寫,最主要目的/差異是:
- 達到真的跨平台
- 雖然理論上只要能夠run IL的CLR .Net 的程式就可以跨平台(例如 Mono就是一個這樣的CLR),但是微軟並沒有support。.Net Core的CLR則是有真的提供由微軟support的跨平台版本。
- 更“小”的程式組合
- 基本上.Net Core是一個更加模組化的平台,換句話說整體的速度和使用的資源更少。因此更符合現代化的Microservice的架構和Container模式執行的結構。
- CLR執行方式的不同
- .Net Core使用app host (dotnet cli)來吧 CoreCLR執行起來,而.Net Framework則不是用app host run起來。因此,.Net Core的console 程式發佈出來是.dll做結尾而不是.exe
- 發佈模式的不同
.Net Core有
- Framework Dependent Deployment(FDD)
- Self-contained Deployment(SCD)
FDD和以前.Net Framework一樣,只有程式本身,需要執行的話那台電腦需要先安裝好.Net Core runtime。
SCD則是把.Net core runtime和程式包在一起,達到不需要有安裝.Net Core runtime就可以執行。
因此.Net Core在定義上面和.Net Framework不同,.Net Framework還是以Windows為主的架構並且提供豐富的api,而.Net Core則是更偏向以microservice跨平台的程式開發。
.Net Core安裝位置和內容
這個部分有:
- .Net Core可以安裝的模式
- .net Core的可安裝版本
- .Net Core的安裝路徑
.Net Core可以安裝的模式
和.Net Framework不同,.Net Core在安裝的時候分了兩個模式:
- .Net Core SDK
- .Net Core Runtime
.Net Core SDK包含了.Net Core Runtime的所有內容,並且多了一些和開發有關的工具。因此,如果要開發,就安裝SDK模式,如果只是要執行.Net Core的程式,那麼安裝 runtime即可。
這個和Java的JDK vs Runtime是一樣的概念。
.Net Core的可安裝版本
.Net Core和.Net Framework不同,每一個版本都可以同時裝在一台電腦上面,因此更加容易使用和開發一樣的版本來run程式。
.Net Core的安裝路徑
預設安裝的路徑在:%programfiles%\dotnet\sdk
.Net Core的版本
目前.Net Core進入到了2.0的時代,在這個版本裡面有個很重要.Net Standard也進入了2.0的版本。因此開發.Net Core變得更加容易(.net Standard在之後會在介紹)。
.Net Core 1.x的時代基本上處於一個比較不穩定的狀態,因為一切都還在確認中,假設有早期進入的就會發現一個很大的改變就是從csproj換到了project.json,然後又從project.json在換回了csproj。
因此如果有幸沒有碰過1.x時代,那麼基本上可以忽略直接從2.0進場。
.Net Core的執行方式
- 編譯程式碼 - .Net Core使用的compiler和.Net Framework一樣(至少是後來版本的一樣),都是使用.Net Compiler Platform (Roslyn)
- 編譯出來的結果是IL程式碼 - 如果包含exe的模式(SCD),exe會是app host
- 執行起來的時候,會搭配.Net Core的base library - CoreBCL
- 透過CoreCLR run 起來會用RyuJIT做及時編譯 並且變成機器碼被執行 - RyuJIT和.Net Framework的JIT在效能上面有加強
- 如果是UWP的程式,可以再編譯的時候透過AOT-Compiler直接變成機器碼,來達到執行速度的提升
結語
這篇介紹了.Net Core的一些基本情況,並且和.Net Framework做一些比較。希望透過這一篇能夠對.Net Core的整個環境有更加的了解。
是否目前就應該直接轉.Net Core?是否.Net Framework未來就會死掉呢?
基本上.Net Framework和.Net Core的對象不同因此不用擔心.Net Framework會死掉。至於是否進入.Net Core.....
在下一篇會對和.Net Core 2.0一起發佈的.Net Standard 2.0作介紹,如果還不確定是否要進入.Net Core,那麼可以先從擁抱.Net Standard 2.0開始。