我正在调试将动态程序集保存到磁盘的问题,我想看看将汇编PE文件保存到磁盘时可以抛出哪些异常。保存代码最终调用AssemblyBuilder.Save
,最终调用内部方法ModuleBuilder.SavePEFile
。此方法是内部QCall,目标方法在名为COMDynamicWrite
的类中声明。但是,整个存储库似乎没有此方法的实现。
COMDynamicWrite::SavePEFile
在哪里以及如何实施?
答案 0 :(得分:2)
让我们回答一下,有一个相关的细节,任何看过CoreCLR项目的人都应该知道。我90%确定.NETCore和CLR的完整版本是从相同的代码库构建的。使用#ifndef FEATURE_CORECLR
禁用了不应该是核心版本的内容。例如,您将找回AppDomain支持,这个功能不在.NETCore中,并且不会计划在那里。
他们在2017年2月10日迈出了一大步,永远地将CoreCLR代码库与其根源分开。他们积极删除了在FEATURE_CORECLR无效时始终禁用的代码。可能为了使移植工作更易于管理,我想他们已经为这段代码提供了很多补丁。
那也删除了COMDynamicWrite :: SavePEFile()。 Unix以来的典型移植问题是不使用PE32可执行文件格式。它仍在the previous version中。
我建议一般使用CoreCLR的第一个签入版本进行此类探索。它具有最少量的补丁,因此最有可能准确地表示桌面CLR行为。同样,请注意拆分后对CLR的更改。当然很难看到。虽然它主要处于维护模式,但我确实知道他们使用GC进行修补,以便能够更好地处理巨大的数GB堆大小。只因为它在4.6中引起了一个令人讨厌的错误,修复于4.6.1