Mono Cecil中的动态方法

Mono Cecil中的动态方法,mono,mono.cecil,Mono,Mono.cecil,Cecil中是否有类似于Reflection.Emit.DynamicMethod的方法?谢谢 动态方法 编辑: 下面的事情呢 EmitCall(例如 EmitCall(OpCodes.Callvirt,GetBuildKey,null); IL.Emit(操作码.Unbox_任意,依赖类型); ) LocalBuilder(例如LocalBuilder解析=ilContext.IL.DeclareLocal(typeof(bool));) System.Reflection.Emit.Labe

Cecil中是否有类似于Reflection.Emit.DynamicMethod的方法?谢谢

  • 动态方法
  • 编辑:

    下面的事情呢

  • EmitCall(例如
    EmitCall(OpCodes.Callvirt,GetBuildKey,null); IL.Emit(操作码.Unbox_任意,依赖类型); )
  • LocalBuilder(例如LocalBuilder解析=ilContext.IL.DeclareLocal(typeof(bool));)
  • System.Reflection.Emit.Label(例如Label existingObjectNotNull=buildContext.IL.DefineLabel();)//我必须使用TextMap吗
  • ILGenerator.BeginCatchBlock(例如,ilContext.IL.BeginCatchBlock(typeof(Exception));)
  • ILGenerator.MarkLabel(例如ilContext.IL.MarkLabel(parameterResolveFailed);)
  • ILGenerator.EndExceptionBlock()(例如ilContext.IL.EndExceptionBlock();)

  • 没有办法用Cecil创建DynamicMethod,也没有等效的方法

    DynamicMethod与运行时紧密相连,而Cecil则完全解耦。他们两个有一个完全独立的类型系统。DynamicMethod是动态的,因此必须使用System.Reflection类型的系统,因为它是运行时可用的系统。Cecil有另一种适合静态分析的这种类型系统的表示,而不必在运行时实际加载程序集。因此,如果您想使用DynamicMethod,您必须将其与环境一起使用

    这个问题最初是在没有DynamicMethods或SRE的运行时环境中提出的,iirc,比如Compact框架,其中可以使用Cecil在运行时发出代码

    当然这是可能的,但是你必须支付加载程序集的费用,这在CF设备上是一个不小的价格。这意味着,如果您可以通过使用Cecil仅使用一个静态方法创建程序集来模拟DynamicMethod,这听起来是一个糟糕的想法。程序集将不可收集(DynamicMethods是),这将导致巨大的内存泄漏


    如果您需要在Compact框架上运行时发出代码,请尽可能少地发出代码,并尽可能少地发出程序集。

    是cecil mono库,对吗?我添加了一个标签mono@Michael您是从.Net迁移到mono还是只是测试它?哦,顺便说一句,我想我们以前认识。我只是在测试和阅读塞西尔的一些代码。我有几个朋友叫马克。。也许,你是我认识的“马克”朋友之一你是中国人吗?还是SG?但SG并没有禁止谷歌给我一些提示。男:)@Michael,你最近在MITP上发布了Silverlight用户见面会的消息,对吗?搜索“马克”在那里,最高的结果是我。哦!可以我认识你。。我们以前在其他论坛上进行过一些转换。。酷。伙计。很高兴在这里见到你。。