.NET Core 代码执行
在本章中,我们将了解 .NET Core的执行过程,并将其与 .NET Framework进行比较,托管执行过程包括以下步骤。
选择编译器
编译你的代码到MSIL
将MSIL编译为本机代码
运行代码
选择编译器
这是一个多语言执行环境,运行时支持多种数据类型和语言功能。
要获得公共语言运行库提供的好处,必须使用一个或多个以运行库为目标的语言编译器。
编译你的代码到MSIL
编译将源代码翻译成微软中间语言( MSIL ),并生成所需的元数据。
元数据描述代码中的类型,包括每个类型的定义、每个类型成员的签名、代码引用的成员以及运行时在执行时使用的其他数据。
运行时根据执行过程中的需要,从文件以及框架类库( FCL )中定位和提取元数据。
将MSIL编译为本机代码
在执行时,即时( JIT )编译器将MSIL翻译成本机代码。
在编译过程中,代码必须通过一个验证过程,检查MSIL和元数据,以确定代码是否可以被确定为类型安全。
运行代码
公共语言运行时提供使执行得以进行的基础设施和在执行期间可以使用的服务。
在执行期间,托管代码接收服务,如垃圾收集、安全性、与非托管代码的互操作性、跨语言调试支持以及增强的部署和版本控制支持。
.Net Core代码执行过程
现在让我们将代码如何像.Net Framework一样与.Net Core一起执行。在.Net Core中,这些组件有许多替换,它们是.NET框架的一部分。
在.Net Core中,现在我们有了一系列新的编译器,就像C#和VB的Roslyn一样。
如果你想将F#与.Net Core一起使用,你也可以使用新的F# 4.1编译器。
实际上这些工具是不同的,如果我们使用C# 6或更高版本,我们也可以使用Roslyn和.NET框架,因为C#编译器最多只能支持C# 5。
在.Net Core中,我们没有框架类库( FCL ),所以使用了一组不同的库,现在我们有了CoreFx。
CoreFx是.Net Core类库的重新实现。
我们还有一个新的.Net Core运行时,称为CoreCLR,并利用JIT编译器。
现在的问题是,为什么我们要重新实现我们.NET框架已经拥有的所有这些组件。
因此,答案与微软实施.Net Core的原因相同。