Cecil有什么类似于Reflection.Emit.DynamicMethod的东西吗?感谢。
修改:
以下事情怎么样?
答案 0 :(得分:5)
无法使用Cecil创建DynamicMethod,也没有等效的。
DynamicMethod与运行时紧密相关,而Cecil完全解耦。他们俩有一个完全独立的类型系统。 DynamicMethod应该是动态的,因此必须使用System.Reflection类型系统,因为它是运行时可用的系统。 Mono.Cecil具有适用于静态分析的此类型系统的另一种表示,无需在运行时实际加载程序集。因此,如果您想使用DynamicMethod,则必须将其与其环境一起使用。
最初在没有DynamicMethods或SRE的运行时环境中询问了这个问题iirc,就像Compact Framework一样,Cecil可以用来在运行时发出代码。
当然有可能,但是你必须付出加载组件的代价,这对CF设备来说是不小的代价。这意味着如果你能通过使用Cecil创建一个只有一个静态方法的程序集来以某种方式模拟DynamicMethod,那听起来很糟糕。程序集不可收集(DynamicMethods),使其成为巨大的内存泄漏。
如果需要在Compact Framework上的运行时发出代码,请尽可能少地发出代码,并尽可能少地发出组件。