用Mono Cecil注入房产电话

问题描述:

如何将此代码注入方法Test()用Mono Cecil注入房产电话

this.DialogResult = DialogResult.OK; 

所以注射后的方法是这样的:

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

这将插入在测试方法上的分配,前提是该领域的DialogResult在同类型声明测试声明(否则你必须浏览它的层次结构才能找回它):

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));