Tôi đã kết thúc bằng cách sử dụng đề xuất cơ bản của leppie, xuất biểu thức cho một hội đồng bên ngoài. Sau đó, tôi sử dụng phản xạ để trích xuất phương pháp và dán nó vào mã của riêng tôi. Sau đó, tôi chạy phương pháp dán, và kiểm tra những gì đã được jitted. Điều này có thể không chính xác 100%, nhưng ít nhất nó cũng đưa ra một dấu hiệu.
Dưới đây là một số mã để viết ra phương pháp (lắp ráp dẫn đến kết thúc trong cùng một thư mục như thực thi):
/// <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");
}
Một khi bạn đã lắp ráp, bạn có thể sử dụng một công cụ như phản xạ để trích xuất phương pháp .
Nguồn
2013-02-19 04:00:11
Cảm ơn bạn đã chia sẻ :) – leppie