Ich benutzte leppies grundlegenden Vorschlag und gab den Ausdruck an eine externe Baugruppe aus. Dann habe ich Reflector verwendet, um die Methode zu extrahieren und sie in meinen eigenen Code einzufügen. Dann führte ich die eingefügte Methode aus und überprüfte, was ich falsch gemacht hatte. Dies ist zwar nicht 100% ig korrekt, gibt aber zumindest einen Hinweis.
Hier ist ein Code für das Verfahren auszuschreiben (die resultierende Anordnung endet in demselben Verzeichnis wie die ausführbare Datei nach oben):
/// <summary>
/// Writes an assembly, containing the given method, to the working directory.
/// The assembly, type, and method are named based on the given hash name.
/// </summary>
public static void WriteMethodToAssembly<T>(Expression<T> method, string hashName) {
var assemblyName = new AssemblyName(hashName);
var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll");
var typeBuilder = moduleBuilder.DefineType(hashName, TypeAttributes.Public);
var methodBuilder = typeBuilder.DefineMethod("Run" + hashName, MethodAttributes.Public | MethodAttributes.Static);
method.CompileToMethod(methodBuilder);
typeBuilder.CreateType();
assemblyBuilder.Save(hashName + ".dll");
}
Sobald Sie die Montage haben, können Sie ein Tool wie Reflektor verwenden können, um die Methode zu extrahieren .
Danke für das Teilen :) – leppie