CLR与核心CLR

rah*_*dev 9 clr .net-core coreclr

我知道CLR在当前状态下绑定到Windows操作系统,并通过内部使用Win32 API提供各种服务.

由于.NET Core与平台无关,这基本上意味着相同的IL代码可以在不同的OS上运行.CoreCLR OS是否具体?或者是编写CoreCLR代码以根据当前执行环境/ OS采用不同的执行路径?

Oma*_*jid 11

coreclr存储库中讨论:

据我所知,此repo [coreclr]中的CLR与完整.NET中的CLR相同,唯一的区别在于corefx中的可用API集.

...但似乎至少缺少C++/CLI ......

要回答其他一些问题:

由于.NET Core与平台无关,这基本上意味着相同的IL代码可以在不同的OS上运行

是.IL是一种自定义的"语言".您可以为它编写可以在任何平台上运行的解释器/运行时.对于其他语言中的其他中间表示也是如此,包括java字节码,llvm ir,python字节码等.

CoreCLR OS是否具体?或者是编写CoreCLR代码以根据当前执行环境/ OS采用不同的执行路径?

这是一个混合.coreclr的特定构建仅适用于一个操作系统,因为它已被编译为使用该操作系统的功能(包括特定于操作系统的编译器,链接到正确的特定于操作系统的库,以及运行专用于处理该操作系统的代码).CoreCLR中还有一个平台抽象层,以便开发人员可以针对一个API进行编码 - 基于Win32 API - 而PAL层将其转换为Linux和Mac上的正确系统调用.正如@HansPassant在评论中所指出的那样,有很多#ifdefs--在本机端和CoreCLR的管理端.