.net core Microsoft.NETCore.Runtime.CoreCLR包未安装在.NET core项目中意味着什么?

.net core Microsoft.NETCore.Runtime.CoreCLR包未安装在.NET core项目中意味着什么?,.net-core,coreclr,.net Core,Coreclr,我试图了解.NET内核的底层,以了解正在发生的事情, 我知道CoreCLR提供垃圾收集器、JIT编译器、基本.NET类型和其他低级类,这最终意味着它是任何正在运行的应用程序的一部分。 当我在ASP.NET核心项目中查找它时,我发现它没有安装,而且它是一个NuGet包。 然后我在存储库的自述文件中发现了这个有趣的部分: 但是,不能使用CoreCLR做很多工作的主要原因是类库中的所有类型看起来都是由CoreFX框架定义的,而不是由CoreCLR定义的。此处定义的任何库代码都位于一个名为System.

我试图了解.NET内核的底层,以了解正在发生的事情, 我知道CoreCLR提供垃圾收集器、JIT编译器、基本.NET类型和其他低级类,这最终意味着它是任何正在运行的应用程序的一部分。 当我在ASP.NET核心项目中查找它时,我发现它没有安装,而且它是一个NuGet包。 然后我在存储库的自述文件中发现了这个有趣的部分:

但是,不能使用CoreCLR做很多工作的主要原因是类库中的所有类型看起来都是由CoreFX框架定义的,而不是由CoreCLR定义的。此处定义的任何库代码都位于一个名为System.Private.CoreLib.DLL的DLL中,顾名思义,它是私有的(隐藏的)。相反,对于CoreCLR中定义的任何特定公共类型,我们在CoreFX中找到了它自然所属的“正确”包,并将该包用作其公共发布点。然后,该“facade”包将引用转发到此处定义的System.private.CoreLib.dll中的(private)实现。例如,CoreFX中定义的System.Runtime包声明了System.Object和System.String等类型的公共名称。因此,从应用程序的角度来看,这些类型存在于System.Runtime.dll中。但是,System.Runtime.dll(在CoreFX repo中定义)最终将引用转发到此处定义的System.Private.CoreLib.dll

我从中了解到(不确定),CoreCLR中的每种类型(如
String
)都定义了两次,一个在CoreCLR(实际定义)中,另一个在CoreFX(外观定义)中,最终指向打包的CoreCLR(System.Private.CoreLib.dll),而在NuGet中显示的pacage Microsoft.NETCore.Runtime.CoreCLR也没有用,因为我只能通过CoreFX访问它


我希望有人能证实这一点或纠正我的错误。

“当我在ASP.NET核心项目中查找它时,发现它没有安装。”你有什么感觉?有任何事实支持这一说法吗?关于类型转发,您的理解不正确。转发是由某些属性完成的,您可以通过ILSpy之类的工具来探索这些属性,因此从字面上看,这些类型不是“定义两次”,而是只定义一次。类型转发可以在大量的帖子中找到,比如和@LexLi,让我觉得,
Microsoft.NETCore.Runtime.CoreCLR
在NuGet中显示为未安装的包,我已经附加了一个链接到