在本章中,我們將了解.NET Core的執(zhí)行過(guò)程,并將其與.NET Framework進(jìn)行比較。被管理的執(zhí)行過(guò)程包括以下步驟。
- 選擇一個(gè)編譯器
- 編譯代碼成MSIL
- 將MSIL編譯為本地代碼
- 運(yùn)行代碼
注:感覺(jué)有點(diǎn)像Java的機(jī)制了。
參考下圖中的流程 -
1. 選擇一個(gè)編譯器
- 它是一個(gè)多語(yǔ)言執(zhí)行環(huán)境,運(yùn)行時(shí)支持各種數(shù)據(jù)類型和語(yǔ)言功能。
- 要獲得公共語(yǔ)言運(yùn)行時(shí)提供的好處,必須使用一個(gè)或多個(gè)定位運(yùn)行時(shí)的語(yǔ)言編譯器。
2. 編譯代碼成MSIL
- 編譯將您的源代碼翻譯成Microsoft中間語(yǔ)言(MSIL)并生成所需的元數(shù)據(jù)。
- 元數(shù)據(jù)描述了代碼中的類型,包括每種類型的定義,每種類型成員的簽名,代碼引用的成員以及運(yùn)行時(shí)在執(zhí)行時(shí)使用的其他數(shù)據(jù)。
- 運(yùn)行時(shí)在執(zhí)行過(guò)程中根據(jù)需要從文件以及框架類庫(kù)(FCL)中查找和提取元數(shù)據(jù)。
3. 將MSIL編譯為本地代碼
- 在執(zhí)行時(shí),即時(shí)(JIT)編譯器將MSIL轉(zhuǎn)換為本地代碼。
- 在編譯期間,代碼必須通過(guò)驗(yàn)證過(guò)程,檢查MSIL和元數(shù)據(jù),以確定代碼是否可以被確定為類型安全的。
4. 運(yùn)行代碼
- 公共語(yǔ)言運(yùn)行庫(kù)提供了執(zhí)行過(guò)程的基礎(chǔ)結(jié)構(gòu)和執(zhí)行過(guò)程中可以使用的服務(wù)。
- 在執(zhí)行期間,托管代碼接收垃圾收集,安全性,與非托管代碼的互操作性,跨語(yǔ)言調(diào)試支持以及增強(qiáng)的部署和版本支持等服務(wù)。
.NET Core代碼執(zhí)行過(guò)程
現(xiàn)在來(lái)看看一下如何使用.NET Core與.NET Framework進(jìn)行代碼執(zhí)行。在.NET Core中,這些組件的很多替代品都是.NET Framework的一部分。執(zhí)行流程圖如下所示 -
- 現(xiàn)在在.NET Core中,我們有了一個(gè)新的編譯器系列,就像用于 C# 和VB的Roslyn一樣。
- 如果想在.NET Core中使用F#,也可以使用新的F# 4.1編譯器。
- 實(shí)際上,這些工具是不同的,如果使用C# 6或更高版本,也可以使用Roslyn和.NET Framework,因?yàn)镃#編譯器最多只能支持C# 5。
- 在.NET Core中,沒(méi)有框架類庫(kù)(FCL),所以使用了一組不同的庫(kù),現(xiàn)在有了CoreFx。
- CoreFx是.NET Core的類庫(kù)的重新實(shí)現(xiàn)。
- 也有一個(gè)新的運(yùn)行時(shí)間與.NET Core CoreCLR,并利用JIT編譯器。