.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 runtime,称为 CoreCLR,并利用了 JIT 编译器。

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

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