private static void InvokeDelegates(IList <TypeDef> typeDefs, MethodInfo invokeMethod, object invokeField) { foreach (TypeDef typeDef in typeDefs) { foreach (MethodDef methodDef in typeDef.Methods) { if (!(methodDef.Module.Name != assembly.ManifestModule.ScopeName) && methodDef.HasBody && methodDef.Body.Instructions.Count > 2 && methodDef.Body.Instructions[0].OpCode == OpCodes.Ldsfld && methodDef.Body.Instructions[0].Operand.ToString().Contains("Invoke") && methodDef.Body.Instructions[1].IsLdcI4()) { currentMethod = methodDef; var _MDToken = ((IType)methodDef.Body.Instructions[3].Operand).MDToken.ToInt32(); junkType.Add(typeDef.NestedTypes.FirstOrDefault(net => net.MDToken.ToInt32() == _MDToken)); object method = invokeMethod.Invoke(invokeField, new object[] { (int)methodDef.Body.Instructions[1].Operand }); try { var dynamicMethodBodyReader = new DynamicMethodBodyReader(assemblyWriter.moduleDef, method); dynamicMethodBodyReader.Read(); var method2 = dynamicMethodBodyReader.GetMethod(); assemblyWriter.WriteMethod(method2); } catch (Exception ex) { Console.WriteLine("Error in Read(): " + ex.Message + "\nMethod : " + method.ToString()); } } } } }