有没有办法对System.Reflection.Emit进行检测?

时间:2015-12-14 14:50:02

标签: c# .net reflection.emit

我在使用System.Reflection.Emit中找到的类生成代码的编译器遇到了一些严重问题。它需要完全有效的代码,并且通过所有编译器的内部检查,并尝试对其进行代码生成,但TypeBuilder.CreateType()会抛出以下完全无用的异常:

  

System.BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)

问题在于它在特定边缘情况下将生成器转换为状态机的方式,但是如果我采用转换后的AST,则将其转换回源代码,并将其作为编译器提供给编译器。 -is,一切都成功构建并按预期运行,这意味着正在发生一些非常奇怪的事情。

问题是,System.Reflection.Emit是一个黑盒子。如果我能以某种方式对其进行检测并使其逐步记录它正在做什么,那将是非常好的,因此我可以区分工作和非工作版本并查看问题所在。我尝试手动执行此操作,在调试器中逐步执行codegen阶段的执行并记录所调用的内容,将其转换为脚本,但这需要几天时间,我一定错过了某些地方,因为我得到了同样的错误,即使它是"工作"我正在寻找的版本。

有没有人知道记录System.Reflection.Emit的方法,这样我就可以很好地了解这里真正发生了什么?

0 个答案:

没有答案