0

目前,我正在阅读 Andrew Troelsen 和 Philip Japikse 编写的名为 C# Pro 7 with .NET 和 .NET Core 的书,作为我编程理论的补充。此刻对我来说很有趣的话题是 .NET 执行引擎 (mscoree.dll) 与 .NET 基类库(例如 mscorlib.dll)的协作。

有人可以告诉我在编译到指令集平台期间我们的解决方案代码与 BCL 交互的原因是什么?

  1. 这种比较(BCL 和 mscorlib.dll)是我们的代码和使用的基类代码方法之间的额外兼容性检查吗?(检查名称约定、返回类型等)
  2. 或者它只是使用存储在 mscrolib.dll 中的类的原始结构的构造,并使用类似于“布局层”的东西,我们可以在其中应用我们的值,然后返回输出信息?

“当需要时,CLR 还将与 .NET 基类库中包含的类型进行交互”这个句子的“必需”部分到底是什么意思?因为这又是我想以正确的方式理解的事情:)

4

1 回答 1

0

我刚刚开始研究这本书。可能您已经找到了答案,但对于好奇的其他人,我会投入两分钱。

为了使编译后的代码在平台上运行,应该将其编译为特定于平台的指令。但在此之前,代码应编译为 MSIL 文件。对于应用程序代码,每次进行更改时都会生成此 MSIL 文件,并且发生在 CLR 之前。对于 BCL,已经存在程序集(MSIL 文件),在 CLR 中它们应该只加载到内存中。因此,运行时引擎定位应将哪些确切的程序集转换为特定于平台的指令并加载到内存中。

所以

CLR 还将在需要时与 .NET 基类库中包含的类型进行交互

这意味着它将查看代码中引用了 BCL 中的哪些类型。

于 2019-03-17T17:03:24.557 回答