Question

Comment puis-je injecter ce code dans la méthode Test()?

this.DialogResult = DialogResult.OK;

Ainsi, la méthode après l'injection ressemblera à ceci:

public void Test()
{
this.DialogResult = DialogResult.OK;
}
Était-ce utile?

La solution

Ce insérera l'affectation en haut de la méthode d'essai, à condition que le DialogResult de champ est déclaré dans le même type déclarant test (sinon vous devrez parcourir sa hiérarchie pour le récupérer):

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top