【问题标题】:Inject property call with Mono Cecil使用 Mono Cecil 注入属性调用
【发布时间】:2014-06-21 17:38:43
【问题描述】:

如何将此代码注入方法Test()

this.DialogResult = DialogResult.OK;

所以注入后的方法会是这样的:

public void Test()
{
this.DialogResult = DialogResult.OK;
}

【问题讨论】:

    标签: c# .net mono.cecil


    【解决方案1】:

    这将在 Test 方法的顶部插入赋值,前提是 DialogResult 字段在声明 Test 的同一类型中声明(否则您必须浏览其层次结构才能检索它):

    var module = ModuleDefinition.ReadModule ("assembly.dll");
    var container = module.GetType ("Container");
    var test = container.Methods.First (m => m.Name == "Test");
    var field = container.Fields.First (f => f.Name == "DialogResult");
    
    var il = test.Body.GetILProcessor ();
    
    var first = test.Body.Instructions [0];
    
    il.InjectBefore (first, il.Create (OpCodes.Ldarg_0));
    il.InjectBefore (first, il.Create (OpCodes.Ldc_i4, (int) DialogResult.Ok));
    il.InjectBefore (first, il.Create (OpCodes.Stfld, field));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2012-06-19
      • 2021-07-05
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2012-04-23
      相关资源
      最近更新 更多