鍍金池/ 教程/ C#/ .NET Core代碼執(zhí)行
.NET Core添加對(duì)庫(kù)的引用
.NET Core包的引用
.NET Core入門程序
.NET Core可移植類庫(kù)
.NET Core項(xiàng)目文件
.NET Core創(chuàng)建UWP應(yīng)用程序
.NET Core代碼執(zhí)行
.NET Core模塊化
.NET Core簡(jiǎn)介
.NET Core教程
.NET Core數(shù)字
.NET Core垃圾收集
.NET Core必備條件
.NET Core MSBuild
.NET Core創(chuàng)建.NET標(biāo)準(zhǔn)庫(kù)
.NET Core開(kāi)發(fā)環(huán)境設(shè)置
.NET Core元數(shù)據(jù)包
.Windows運(yùn)行時(shí)和擴(kuò)展SDK

.NET Core代碼執(zhí)行

在本章中,我們將了解.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編譯器。