gpt4 book ai didi

c# - 使用 Mono Cecil 注入(inject)属性调用

转载 作者:行者123 更新时间:2023-11-30 22:42:44 36 4
gpt4 key购买 nike

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

this.DialogResult = DialogResult.OK;

所以注入(inject)后的方法是这样的:

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

最佳答案

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

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

关于c# - 使用 Mono Cecil 注入(inject)属性调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261645/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com