.NET Core Common Language Runtime (CoreCLR)

風靈使發表於2019-01-16

此儲存庫包含 .NET Core執行時的完整原始碼。

.NET Core最好被認為是“敏捷.NET”。一般來說它是一樣的
Desktop .NET Framework
作為Windows作業系統的一部分分發,但它是一個跨平臺
(Windows,Linux,macOS)和可以部署的跨體系結構(x86,x64,ARM)子集
作為應用程式的一部分(如果需要),因此可以快速更新以修復錯誤或新增功能。

具體而言,此儲存庫最好被認為是以下NuGet包的原始碼:

  • ** Microsoft.NETCore.Runtime.CoreCLR ** - 表示物件分配器,垃圾收集器(GC),類
    載入器,型別系統,互操作和.NET類庫的最基本部分(例如
    System.Object,System.String …)

它還包含以下密切相關的支援包的原始碼。

  • Microsoft.NETCore.Jit - Just In Time(JIT)編譯器 .NET中間語言(IL)

  • Microsoft.NETCore.ILAsm - 用於的彙編程式 .NET中間語言(IL)

  • Microsoft.NETCore.ILDAsm

  • Microsoft.NETCore.TestHost - 這包含corehost.exe程式,這是一個小包裝器 使用.NET執行時執行在命令列上傳遞給它的IL DLL。

  • Microsoft.TargetingPack.Private.CoreCLR - 一組表示編譯時表面的程式集 由執行時本身實現的類庫的區域。

CoreFX儲存庫的關係

就其本身而言,Microsoft.NETCore.Runtime.CoreCLR包實際上還不夠。
其中一個原因是CoreCLR包試圖最小化它實現的類庫的數量。
僅包括對執行時的內部工作具有強依賴性的型別(例如,
System.ObjectSystem.StringSystem.Threading.ThreadSystem.Threading.Tasks.Task和大多數基礎介面)。
相反,大多數類庫都是作為獨立的NuGet包實現的,它只使用.NET Core
執行時作為依賴項。 許多最熟悉的類(System.CollectionsSystem.IOSystem.Xml等),存在dotnet/corefx 儲存庫中定義的包中。

但是你對CoreCLR做不了多少的主要原因是 類庫LOOK中的型別ALL **
就像它們是由CoreFX框架而不是CoreCLR定義的。這裡定義的任何庫程式碼
它位於一個名為System.Private.CoreLib.dll的DLL中,顧名思義就是私有(隱藏)。
相反,對於CoreCLR中定義的任何特定PUBLIC型別,我們在CoreFX中自然地找到了“正確”的包
屬於並使用該包作為
public publishing**點。那個’facade’ 包然後轉發引用
到這裡定義的System.Private.CoreLib.dll中的(私有)實現。
例如,CoreFX中定義的*System.Runtime *包宣告類似的型別的PUBLIC名稱
System.ObjectSystem.String。因此,從應用程式的角度來看,這些型別存在於System.Runtime.dll中。
但是,System.Runtime.dll(在​​CoreFX repo中定義)最終將引用轉發給System.Private.CoreLib.dll
這是在這裡定義的。

因此,為了執行應用程式,您需要同時使用Microsoft.NETCore.Runtime.CoreCLR NuGet包
(在此儲存庫中定義)以及您實際引用的任何已定義的包
在CoreFX儲存庫中(至少包括System.Runtime包)。你還需要一些
載入CoreCLR包以及CoreFX包並啟動程式碼的“host”可執行檔案(通常是
你使用dotnet.exe這個)。

相關文章