.NET核心如何在多种环境中运行?

时间:2017-11-10 11:13:12

标签: .net .net-core

.NET核心如何设法在多个操作系统中运行相同的DLL?

我现在必须在您要运行应用程序的环境中安装.NET核心。

但我并不完全理解.NET核心真正在幕后所做的工作。

它是在第一次运行之前编译为本机还是解释每个命令并执行底层系统中的每个命令?

2 个答案:

答案 0 :(得分:3)

.Net core是一种JIT编译的VM语言。 dll基本上包含一种字节码形式。这适用于所有.Net实现,而不仅仅是.Net Core。字节码是在运行时根据需要在本机代码中编译的JIT。 [还有一个名为NGEN的过程允许这个字节码 - >原生编译提前发生]。传统的变化.Net => .Net核心更多的是删除底层库系统和运行时的OS依赖性。

JIT(通常)在首次使用时编译(即它只需编译实际调用的方法等)并保留编译版本以供重用。如果感觉需要,它至少可以选择“重新编译”热路径等更优化[我不知道微软的JIT目前是否真的这样做]。

  

进一步阅读:   https://en.wikipedia.org/wiki/Common_Intermediate_Language#Just-in-time_compilation   https://www.telerik.com/blogs/understanding-net-just-in-time-compilation   http://tirania.org/blog/archive/2012/Apr-04.html

答案 1 :(得分:0)

当我们谈论.net核心时,我们谈的是三个主要特征:

  1. Core Clr
  2. Core Cli
  3. CoreFx
  4. CoreFx实际上是BCL的新实现,它是用C#编写的,包括开发应用程序所需的所有类。 CoreFX使用#if预处理器在100%的情况下指定不同的操作系统。 .NET Core命令行界面(CLI)是一个新的跨平台工具链,用于开发.NET应用程序和 Core Clr是.net核心运行时机器,负责在不同的环境中执行代码并用C ++编写。它在95%的情况下使用#if预处理器。但是由于在Core-Clr开发中产生了很多代码,Core-Clr团队分离Linux和Windows版本来处理这5%的先例,最后共享运行时负责在linux和mac中加载.net类库,这就是答案你的问题希望它可以帮到你。