据我所知,当前状态下的CLR绑定到Windows操作系统,并在内部使用Win32 API提供各种服务。
由于.NET Core与平台无关,因此这基本上意味着相同的IL代码可以在不同的OS上运行。 CoreCLR OS是否具体?或者编写CoreCLR代码以根据当前执行环境/操作系统采用不同的执行路径?
答案 0 :(得分:10)
来自discussion in coreclr repository:
据我所知,此repo [coreclr]中的CLR与完整.NET中的CLR相同,唯一的区别在于corefx中的可用API集。
...但似乎至少缺少C ++ / CLI ...
回答其他一些问题:
由于.NET Core与平台无关,这基本上意味着相同的IL代码可以在不同的OS上运行
是。 IL是一种习惯语言"。您可以为它编写可以在任何平台上运行的解释器/运行时。对于其他语言中的其他中间表示也是如此,包括java字节码,llvm ir,python字节码等。
CoreCLR操作系统是否具体?或者编写CoreCLR代码以根据当前执行环境/操作系统采用不同的执行路径?
这是一个混合体。 coreclr的特定构建仅适用于一个操作系统,因为它已被编译为使用该操作系统的功能(包括特定于操作系统的编译器,链接到正确的特定于操作系统的库,以及运行专用于处理该操作系统的代码)。 CoreCLR中还有一个平台抽象层,以便开发人员可以针对一个API进行编码 - 基于Win32 API - 而PAL层将其转换为Linux和Mac上的正确系统调用。正如@HansPassant在评论中指出的那样,有很多#ifdefs--无论是在原生方还是在CoreCLR的管理方。