Eric Lippert在 SO 的记录中说,
Reflection.Emit 太弱,无法用于构建真正的编译器。它非常适合小玩具编译任务,例如在 LINQ 查询中发出动态调用站点和表达式树,但对于您在编译器中将面临的各种问题,您将很快超出其能力。使用 CCI,而不是 Reflection.Emit。
我有一个真正的编译器,不幸的是(不是我自己)在 Reflection.Emit 上构建的。它痛苦地与这些限制相抵触,我想将发射代码转换为 CCI。不过,我发现了一些似乎没有任何等价物的东西。
例如,这些行:
_asmBuilder.DefineVersionInfoResource();
_moduleBuilder.CreateGlobalFunctions(); //setup global .data
我看不到任何方法可以做同样的事情,特别是因为我一开始就找不到与 ModuleBuilder 等效的东西。
是否有任何好的参考或文档可用于如何将 Reflection.Emit 项目转换为 CCI?