Dotnet Core 简明教程

.NET Core - Code Execution

在本章中,我们将了解 .NET Core 的执行过程并将其与 .NET Framework 进行比较。托管执行过程包括以下步骤。

  1. Choosing a compiler

  2. 将您的代码编译为 MSIL

  3. 将 MSIL 编译为本机代码

  4. Running code

code execution

Choosing a Compiler

  1. 它是一个多语言执行环境,该运行时支持各种数据类型和语言特性。

  2. 要获取公共语言运行时提供的优势,您必须使用一种或多种针对运行时的语言编译器。

Compiling your code to MSIL

  1. 编译会将您的源代码翻译成 Microsoft 中间语言 (MSIL) 并生成所需的元数据。

  2. 元数据描述代码中的类型,包括每个类型的定义、每个类型成员的签名、代码引用的成员,以及在执行时运行时所用的其他数据。

  3. 在执行期间,运行时会根据需要从文件以及框架类库 (FCL) 中查找和提取元数据。

Compiling MSIL to Native Code

  1. 在执行时,即时 (JIT) 编译器会将 MSIL 翻译成本机代码。

  2. 在此编译过程中,代码必须通过一个验证过程,该过程会检查 MSIL 和元数据以找出能否确定代码是类型安全的。

Running Code

  1. 公共语言运行时提供了使执行得以发生的基础架构,以及可以在执行期间使用的服务。

  2. 在执行过程中,托管代码会收到服务,如垃圾回收、安全性、与非托管代码的互操作性、跨语言调试支持,以及增强的部署和版本控制支持。

.NET Core Code Execution Process

现在让我们关联一下使用 .NET Framework 和 .NET Core 来执行代码的方法。在 .NET Core 中,有这些组件的许多替代品,这些组件是 .NET Framework 的一部分。

dotnet core code execution
  1. 在 .NET Core 中,我们现在有了一系列新的编译器,比如 C# 和 VB 的 Roslyn。

  2. 如果你想使用 F# 与 .NET Core,那你还可以利用新的 F# 4.1 编译器。

  3. 实际上,这些工具是不同的,如果我们使用的是 C# 6 或更高版本,那我们也可以将 Roslyn 与 .NET Framework 结合使用,因为 C# 编译器只能支持至 C# 5。

  4. 在 .NET Core 中,我们没有框架类库(FCL),因此会使用一组不同的库,而我们现在有了 CoreFx。

  5. CoreFx 是面向 .NET Core 的类库的重新实现。

  6. 我们还拥有一个新的运行时,即 .NET Core,被称为 CoreCLR 并且利用 JIT 编译器。

  7. 现在的问题在于,我们为什么要重新实现 .NET 框架中已经拥有的所有这些组件。

  8. 因此答案与 Microsoft 为何要实现 .NET Core 相同。