在塞西尔有类似于Reflection.Emit.DynamicMethod的东西吗?谢谢。
编辑:
下面的事情呢?
IL.EmitCall(OpCodes.Callvirt,GetBuildKey,null);IL.Emit(OpCodes.Unbox_Any,dependencyType);OpCodes.Callvirt(例如LocalBuilder resolving = ilContext.IL.DeclareLocal(typeof(bool));)
)
发布于 2010-07-02 08:11:32
没有办法用塞西尔创建一个DynamicMethod,也没有类似的方法。
DynamicMethod与运行时紧密相连,而Cecil是完全解耦的。他们两人有一个完全不同的类型系统。DynamicMethod应该是动态的,因此必须使用System.Reflection类型系统,因为它是运行时可用的系统。Mono.Cecil有另一种适用于静态分析的这种类型系统的表示形式,而不必在运行时实际加载程序集。因此,如果您想要使用DynamicMethod,您必须与它的环境一起使用它。
这个问题最初是在没有DynamicMethods或SRE的运行时环境中提出的,比如Compact,在运行时可以使用Cecil来发出代码。
当然,这是可能的,但是您必须支付加载组装的代价,这在CF设备上并不是一个小的价格。这意味着,如果您可以通过使用Cecil创建一个只有一个静态方法的程序集来模拟DynamicMethod,这听起来是个糟糕的主意。程序集不会是可收集的(DynamicMethods是),这使得它成为一个巨大的内存泄漏。
如果您需要在Compact上运行时发出代码,则发出尽可能少的程序集,并且发出尽可能少的程序集。
https://stackoverflow.com/questions/2656987
复制相似问题