首页 > 解决方案 > 无论如何更新IL指令以使用新的局部变量索引?

问题描述

我正在尝试将一种方法注入另一种方法。问题是局部变量索引。例子-

 public void Method1()
    {
        var tes = "anything";

    }

    public void Method2()
    {
        var spring = 40;

    }

我想将 method1 注入到 method2 中,但问题是它会抛出无效的 IL 代码,因为index 0处的 method1局部变量是string类型,而index 0处的 method2局部变量是int类型。我所做的是获取 method1 methodDefinition并通过 -

  var Method1_Instructions= MethodDefinition.Body.Instructions.ToList();// method1 methodDefinition
var Method1_localVariables= Method1_MethodDefinition.Body.Variables
   for (var I = 0; I < Method1_localVariables.Count; I++)
                    {
                        Method2_MethodDefinition.Body.Variables.Insert(I,
                            Method1_localVariables[I]); 

                    }

我将方法 1 的局部变量添加到方法 2 变量列表中,并在它之前插入指令。但由于局部变量索引问题,我知道它错误的 IL 代码。那么,如何在不自己编写 IL 代码的情况下修复它?

标签: monomono.cecil

解决方案


推荐阅读