Dotnet Core 简明教程
.NET Core - Code Execution
在本章中,我们将了解 .NET Core 的执行过程并将其与 .NET Framework 进行比较。托管执行过程包括以下步骤。
-
Choosing a compiler
-
将您的代码编译为 MSIL
-
将 MSIL 编译为本机代码
-
Running code
Compiling your code to MSIL
-
编译会将您的源代码翻译成 Microsoft 中间语言 (MSIL) 并生成所需的元数据。
-
元数据描述代码中的类型,包括每个类型的定义、每个类型成员的签名、代码引用的成员,以及在执行时运行时所用的其他数据。
-
在执行期间,运行时会根据需要从文件以及框架类库 (FCL) 中查找和提取元数据。
Compiling MSIL to Native Code
-
在执行时,即时 (JIT) 编译器会将 MSIL 翻译成本机代码。
-
在此编译过程中,代码必须通过一个验证过程,该过程会检查 MSIL 和元数据以找出能否确定代码是类型安全的。
Running Code
-
公共语言运行时提供了使执行得以发生的基础架构,以及可以在执行期间使用的服务。
-
在执行过程中,托管代码会收到服务,如垃圾回收、安全性、与非托管代码的互操作性、跨语言调试支持,以及增强的部署和版本控制支持。
.NET Core Code Execution Process
现在让我们关联一下使用 .NET Framework 和 .NET Core 来执行代码的方法。在 .NET Core 中,有这些组件的许多替代品,这些组件是 .NET Framework 的一部分。
-
在 .NET Core 中,我们现在有了一系列新的编译器,比如 C# 和 VB 的 Roslyn。
-
如果你想使用 F# 与 .NET Core,那你还可以利用新的 F# 4.1 编译器。
-
实际上,这些工具是不同的,如果我们使用的是 C# 6 或更高版本,那我们也可以将 Roslyn 与 .NET Framework 结合使用,因为 C# 编译器只能支持至 C# 5。
-
在 .NET Core 中,我们没有框架类库(FCL),因此会使用一组不同的库,而我们现在有了 CoreFx。
-
CoreFx 是面向 .NET Core 的类库的重新实现。
-
我们还拥有一个新的运行时,即 .NET Core,被称为 CoreCLR 并且利用 JIT 编译器。
-
现在的问题在于,我们为什么要重新实现 .NET 框架中已经拥有的所有这些组件。
-
因此答案与 Microsoft 为何要实现 .NET Core 相同。