在本章中,我们将了解.NET Core的执行过程并将其与.NET Framework进行比较.托管执行过程包括以下步骤:
选择编译器
将代码编译为MSIL
将MSIL编译为本机代码
运行代码
选择编译器
它是一个多语言执行环境,运行时支持各种数据类型和语言功能.
获取公共语言运行库提供的好处,您必须使用一个或多个目标运行时的语言编译器.
将代码编译为MSIL
编译将源代码转换为Microsoft中间语言(MSIL)并生成所需的元数据.
元数据描述代码中的类型,包括每种类型的定义t每个类型成员的签名,代码引用的成员以及运行时在运行时使用的其他数据.
运行时查找并提取元数据在执行期间根据需要从文件和框架类库(FCL).
将MSIL编译为本机代码
在执行时,实时(JIT)编译器将MSIL转换为本机代码.
在此编译过程中,代码必须通过验证过程,该过程检查MSIL和元数据,以确定代码是否可以确定为类型安全.
运行代码
公共语言运行库提供的基础结构启用执行以及可在执行期间使用的服务.
在执行期间,托管代码接收垃圾收集,安全性,整数等服务非托管代码的可侵犯性,跨语言调试支持以及增强的部署和版本控制支持.
.NET核心代码执行流程
现在让我们来看一下与.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的原因相同.