在本章中,我們將了解.NET Core的執(zhí)行過程,并將其與.NET Framework進行比較。被管理的執(zhí)行過程包括以下步驟。
- 選擇一個編譯器
- 編譯代碼成MSIL
- 將MSIL編譯為本地代碼
- 運行代碼
注:感覺有點像Java的機制了。
參考下圖中的流程 -

1. 選擇一個編譯器
- 它是一個多語言執(zhí)行環(huán)境,運行時支持各種數(shù)據(jù)類型和語言功能。
- 要獲得公共語言運行時提供的好處,必須使用一個或多個定位運行時的語言編譯器。
2. 編譯代碼成MSIL
- 編譯將您的源代碼翻譯成Microsoft中間語言(MSIL)并生成所需的元數(shù)據(jù)。
- 元數(shù)據(jù)描述了代碼中的類型,包括每種類型的定義,每種類型成員的簽名,代碼引用的成員以及運行時在執(zhí)行時使用的其他數(shù)據(jù)。
- 運行時在執(zhí)行過程中根據(jù)需要從文件以及框架類庫(FCL)中查找和提取元數(shù)據(jù)。
3. 將MSIL編譯為本地代碼
- 在執(zhí)行時,即時(JIT)編譯器將MSIL轉換為本地代碼。
- 在編譯期間,代碼必須通過驗證過程,檢查MSIL和元數(shù)據(jù),以確定代碼是否可以被確定為類型安全的。
4. 運行代碼
- 公共語言運行庫提供了執(zhí)行過程的基礎結構和執(zhí)行過程中可以使用的服務。
- 在執(zhí)行期間,托管代碼接收垃圾收集,安全性,與非托管代碼的互操作性,跨語言調試支持以及增強的部署和版本支持等服務。
.NET Core代碼執(zhí)行過程
現(xiàn)在來看看一下如何使用.NET Core與.NET Framework進行代碼執(zhí)行。在.NET Core中,這些組件的很多替代品都是.NET Framework的一部分。執(zhí)行流程圖如下所示 -

- 現(xiàn)在在.NET Core中,我們有了一個新的編譯器系列,就像用于 C# 和VB的Roslyn一樣。
- 如果想在.NET Core中使用F#,也可以使用新的F# 4.1編譯器。
- 實際上,這些工具是不同的,如果使用C# 6或更高版本,也可以使用Roslyn和.NET Framework,因為C#編譯器最多只能支持C# 5。
- 在.NET Core中,沒有框架類庫(FCL),所以使用了一組不同的庫,現(xiàn)在有了CoreFx。
- CoreFx是.NET Core的類庫的重新實現(xiàn)。
- 也有一個新的運行時間與.NET Core CoreCLR,并利用JIT編譯器。