मैं लेपी के मूल सुझाव का उपयोग करके समाप्त हुआ, बाहरी अभिव्यक्ति को अभिव्यक्ति को आउटपुट कर रहा था। फिर, मैंने विधि निकालने के लिए परावर्तक का उपयोग किया और इसे अपने कोड में पेस्ट किया। तब मैंने चिपकाया विधि चलाया, और जांच की कि क्या लगाया गया था। यह 100% सटीक नहीं हो सकता है, लेकिन यह कम से कम एक संकेत देता है।
यहाँ विधि बाहर लिखने के लिए कुछ कोड (जिसके परिणामस्वरूप विधानसभा निष्पादन उसी निर्देशिका में समाप्त होता है) है:
/// <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");
}
एक बार जब आप विधानसभा है, तो आप एक उपकरण के परावर्तक की तरह विधि को निकालने के लिए उपयोग कर सकते हैं ।
स्रोत
2013-02-19 04:00:11
साझा करने के लिए धन्यवाद :) – leppie