2010-11-23 25 views
2

このコードをメソッドTest()に挿入するにはどうすればよいですか?Mono Cecilによるプロパティ呼び出しの呼び出し

this.DialogResult = DialogResult.OK; 

だから、注入後の方法は次のようになります。試験方法の最上部に割り当てを挿入します

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

答えて

3

は、フィールド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)); 
関連する問題