运行时方法修改

时间:2017-07-05 17:16:56

标签: c# .net mono mono.cecil

我有以下代码,使用Mono.Cecil:

        {
            ModuleDefinition module = ModuleDefinition.ReadModule("library.dll");
            TypeDefinition type1 = module.Types.Where(t => "Namespace.Destination".Equals(t.FullName)).Single();
            TypeDefinition type2 = module.Types.Where(t => "Namespace.Target".Equals(t.FullName)).Single();
            MethodDefinition method1 = type1.Methods.Where(m => "Test".Equals(m.Name)).Single();
            MethodDefinition method2 = type2.Methods.Where(m => "Test".Equals(m.Name)).Single();

            var processor = methodTesta1.Body.GetILProcessor();
            var newInstruction = processor.Create(OpCodes.Call, methodTesta2);
            var firstInstruction = methodTesta1.Body.Instructions[0];
            processor.Replace(firstInstruction, newInstruction);
        }

        namespace Namespace
        {
            public class Destination
            {
                public String Test()
                {
                    Console.Write("Destination method");
                }
            }

            public class Target
            {
                public String Test()
                {
                    Console.Write("Target Method");
                }
            }
        }

我不想创建新的" dll"文件或覆盖当前,我想只在运行时修改类。 我怎么能坚持下去"修改并使用修改后的方法创建Destination类的新实例? 有办法吗?

编辑:目标是执行不同的方法体,当调用某个方法时,返回某种类型。

0 个答案:

没有答案