0

我正在调试将动态程序集保存到磁盘的问题,我想看看将程序集 PE 文件保存到磁盘时会引发哪些异常。保存代码最终调用到AssemblyBuilder.Save最终调用内部方法ModuleBuilder.SavePEFile。此方法是一个内部QCall,目标方法在一个名为 的类中声明COMDynamicWrite。但是,整个存储库似乎没有此方法的实现。

在哪里以及如何COMDynamicWrite::SavePEFile实施?

4

1 回答 1

2

让我们来回答这个问题,任何查看 CoreCLR 项目的人都应该知道的相关细节。我 90% 确信 .NETCore 和完整版的 CLR 是从同一个代码库构建的。不应该是核心版本的东西被禁用了#ifndef FEATURE_CORECLR。例如,您会重新获得 AppDomain 支持,这是 .NETCore 中没有的功能,也不打算在其中提供。

他们在 2017 年 2 月 10 日迈出了一大步,将 CoreCLR 代码库与其根源永久分离。他们积极删除了 FEATURE_CORECLR 无效时始终禁用的代码。可能是为了使移植工作更易于管理,我想他们为此代码提供了很多补丁。

这也删除了 COMDynamicWrite::SavePEFile()。一个典型的移植问题,因为 Unix 不使用 PE32 可执行文件格式。它仍然存在于以前的版本中。

我一般建议使用 CoreCLR 的第一个签入版本进行这种探索。它的补丁数量最少,因此最有可能准确地表示桌面 CLR 行为。同样,请注意拆分后对 CLR 的更改。当然很难看到。虽然它主要处于维护模式,但我确实知道他们对 GC 进行了修补,以使其能够更好地处理巨大的数 GB 堆大小。只是因为它在 4.6 中造成了一个讨厌的错误,在 4.6.1 中修复

于 2017-04-30T09:45:08.033 回答