Skończyłem z wykorzystaniem podstawowej sugestii leppiego, wyprowadzając wyrażenie do zewnętrznego zespołu. Następnie użyłem reflektora, aby wyodrębnić metodę i wkleić ją do mojego własnego kodu. Potem uruchomiłem metodę wklejania i sprawdziłem, co zostało podważone. To może nie być w 100% dokładne, ale przynajmniej daje wskazanie.
Oto niektóre kodu do zapisywania się metodę (powstały zespół kończy się w tym samym katalogu co plik wykonywalny):
/// <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");
}
Kiedy masz zespół, można użyć narzędzia jak reflektor, aby wyodrębnić metody .
Dzięki za udostępnienie :) – leppie