C# 使用Mono Cecil注入属性调用

C# 使用Mono Cecil注入属性调用,c#,.net,mono.cecil,C#,.net,Mono.cecil,如何将此代码注入方法Test() 因此,注入后的方法如下所示: public void Test() { this.DialogResult = DialogResult.OK; } 这将在测试方法的顶部插入赋值,前提是字段DialogResult是在相同的类型声明测试中声明的(否则您必须浏览其层次结构才能检索它): public void Test() { this.DialogResult = DialogResult.OK; } var module = ModuleDefinitio

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

因此,注入后的方法如下所示:

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

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

public void Test()
{
this.DialogResult = DialogResult.OK;
}
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));