微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 mono cecil 返回 Task.FromResult<bool>(true)?

如何解决如何使用 mono cecil 返回 Task.FromResult<bool>(true)?

我需要使用mono cecil来实现下面的逻辑。

public Task<bool> MyTask()
{
    return Task.Fromresult<bool>(true);
}

我只知道如何调用非泛型方法,因为在cecil项目中有相应的演示代码。我不知道如何调用泛型方法。谁能告诉我该怎么做?相应的 IL 代码应如下所示:

ldc.i4.1 调用类 [mscorlib]System.Threading.Tasks.Task`1 [mscorlib]System.Threading.Tasks.Task::Fromresult(!!0) 返回

这就是我现在所拥有的:

void Main()
{
    AssemblyDeFinition asm = AssemblyDeFinition.ReadAssembly(@"F:\files.fm\Code\asm_wrangler\asm_wrangler\bin\Debug\a.exe");

    MethodInfo writeLineMethod = typeof(Debug).getmethod("WriteLine",new Type[] { typeof(string) });
    MethodReference writeLine = asm.MainModule.Import(writeLineMethod);

    foreach (ModuleDeFinition module in asm.Modules)
    {
        foreach (TypeDeFinition type in module.Types)
        {
            foreach (var method in type.Methods)
            { 
                if (method.Name == "MyTask")
                {
                    var ins = method.Body.Instructions;
                    ins.Clear();
                    ILProcessor processor = method.Body.GetILProcessor();
                    
                    ins.Add(processor.Create(OpCodes.Ldc_I4_1));
                    
                    // ===> How to invoke Task.Fromresult<bool>(true) here?
                    
                    ins.Add(processor.Create(OpCodes.Ret));
                }
            }
        }
    }
}

解决方法

你需要setState(object),然后你可以像调用其他方法一样调用它

MakeGenericMethod

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。