Dieser Code funktioniertBetrieb könnte die Laufzeitfehler, wenn invoke ToString von int mit Emit
var toString = typeof(string).GetMethod("ToString", new Type[] { });
var dm = new DynamicMethod("MyToString", typeof(string), new Type[] { typeof(string) });
var il = dm.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Callvirt, toString);
il.Emit(OpCodes.Ret);
Delegate d = dm.CreateDelegate(typeof(Func<string, string>));
var r = d.DynamicInvoke("10");
destabilisieren Dieser Code eine Ausnahme auslöst (System.Security.VerificationException. Der Betrieb der Laufzeit destabilisieren könnte)
var toString = typeof(int).GetMethod("ToString", new Type[] { });
var dm = new DynamicMethod("MyToString", typeof(string), new Type[] { typeof(int) });
var il = dm.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Callvirt, toString);
il.Emit(OpCodes.Ret);
Delegate d = dm.CreateDelegate(typeof(Func<int, string>));
var r = d.DynamicInvoke(10);
warum?
Der Ldarga-Befehl funktioniert auch nicht, ich werde versuchen, zu dekompilieren, um zu sehen, wie es funktioniert –
'Ldarga' +' Call' ist was Roslyn auch erzeugt. Wenn das bei dir nicht funktioniert, dann machst du etwas falsch, aber ich weiß nicht was. Für eine schnelle Online-Dekompilierungsprüfung versuchen Sie 'öffentliche statische Klasse C {öffentliche statische Zeichenkette F (int i) => i.ToString(); } auf http://tryroslyn.azurewebsites.net/. – hvd
Es tut mir leid, ich habe es wieder mit der Ldarga versucht und funktioniert jetzt, ich weiß nicht, was ich gestern falsch gemacht habe –