我在使用System.Reflection.Emit
中找到的类生成代码的编译器遇到了一些严重问题。它需要完全有效的代码,并且通过所有编译器的内部检查,并尝试对其进行代码生成,但TypeBuilder.CreateType()
会抛出以下完全无用的异常:
System.BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)
问题在于它在特定边缘情况下将生成器转换为状态机的方式,但是如果我采用转换后的AST,则将其转换回源代码,并将其作为编译器提供给编译器。 -is,一切都成功构建并按预期运行,这意味着正在发生一些非常奇怪的事情。
问题是,System.Reflection.Emit
是一个黑盒子。如果我能以某种方式对其进行检测并使其逐步记录它正在做什么,那将是非常好的,因此我可以区分工作和非工作版本并查看问题所在。我尝试手动执行此操作,在调试器中逐步执行codegen阶段的执行并记录所调用的内容,将其转换为脚本,但这需要几天时间,我一定错过了某些地方,因为我得到了同样的错误,即使它是"工作"我正在寻找的版本。
有没有人知道记录System.Reflection.Emit
的方法,这样我就可以很好地了解这里真正发生了什么?