.NET Core 代码执行过程

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

  • 选择一个编译器
  • 将代码编译为 MSIL
  • MSIL 编译为本机代码
  • 运行代码

选择一个编译器
  • 它是一个多语言执行环境,运行时支持多种数据类型和语言特性。
  • 要获得公共语言运行时提供的好处,必须使用一个或多个以运行时为目标的语言编译器。
将代码编译为 MSIL
  • 编译将源代码转换为 Microsoft 中间语言(MSIL)并生成所需的元数据。
  • 元数据描述代码中的类型,包括每个类型的定义、每个类型成员的签名、代码引用的成员以及运行时在执行时使用的其他数据。
  • 运行时在执行期间根据需要从文件以及框架类库(FCL)中查找并提取元数据。
将 MSIL 编译为本机代码
  • 在执行时,即时(JIT)编译器将 MSIL 转换为本机代码。
  • 在此编译期间,代码必须通过一个验证过程,该过程检查 MSIL 和元数据,以确定代码是否可以确定为类型安全的。
运行代码
  • 公共语言运行库提供了使执行能够进行的基础设施以及可以在执行期间使用的服务。
  • 在执行过程中,托管代码接收诸如垃圾收集、安全性、与非托管代码的互操作性、跨语言调试支持以及增强的部署和版本控制支持等服务。

.NET Core 代码执行过程

现在,让我们将代码与 .NET Framework 相比如何在 .NET Core 中执行。在 .NET Core 中,这些组件是 .NET Framework 的一部分,有许多替代品。

  • 在 .NET Core 中,现在我们有了一系列新的编译器,就像我们有针对 C# 和 VB 的 Roslyn
  • 如果您想在 .NET Core 中使用 F#,也可以使用新的 F# 4.1 编译器。
  • 实际上,这些工具是不同的,如果我们使用 C# 6 或更高版本,我们也可以将 Roslyn 与 .NET Framework 一起使用,因为 C# 编译器最多只能支持 C# 5。
  • 在 .NET Core 中,我们没有框架类库(FCL),因此使用了一组不同的库,我们现在有了 CoreFx
  • CoreFx 是 NET Core 类库的重新实现。
  • 我们还有一个新的 .NET Core 运行时,称为 Core CLR,它利用了 JIT 编译器。
  • 现在的问题是,我们为什么要重新实现 .NET framework 中已有的所有这些组件。
  • 因此,答案与微软实施 .NET Core 的原因相同。