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