.NET Core - 代码执行


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

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

选择编译器

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

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

将代码编译为 MSIL

  • 编译会将源代码转换为 Microsoft 中间语言 (MSIL) 并生成所需的元数据。

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

  • 运行时在执行期间根据需要从文件以及框架类库 (FCL) 中定位并提取元数据。

将 MSIL 编译为本机代码

  • 在执行时,即时 (JIT) 编译器将 MSIL 转换为本机代码。

  • 在此编译期间,代码必须通过验证过程,该过程检查 MSIL 和元数据,以确定代码是否可以确定为类型安全。

运行代码

  • 公共语言运行时提供了支持执行的基础结构以及执行过程中可以使用的服务。

  • 在执行期间,托管代码接收垃圾收集、安全性、与非托管代码的互操作性、跨语言调试支持以及增强的部署和版本控制支持等服务。

.NET Core代码执行流程

现在让我们比较一下使用 .NET Core 与 .NET Framework 执行代码的方式。在 .NET Core 中,这些组件有许多替代品,它们是 .NET Framework 的一部分。

.NET Core 代码执行
  • 在 .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 框架中已有的所有这些组件。

  • 所以答案和微软为什么要实现.NET Core是一样的。