(Forum Q & A Drop) A dynamic compilation example

xiaoxiao2021-03-06  14

Using system.codedom.compiler; using microsoft.csharp; using system.text;

A summary description of Namespace consoleApplication22 {///

/// class1. /// class class1 {/// /// The primary entry point of the application. /// [stathread] static void main (string [] args) {// // Todo: Add code here to launch application // int i = (int) CALC ("1 2 * 3 "); console.writeline (i.tostring ()); console.readline ();

}

Public Static Object Calc (String Expression) {String ClassName = "CALC"; string methodname = "run"; expression = expression.replace ("/", "* 1.0 /"); // Create a compiler instance. ICodeCompiler Complier = (New CsharpcodeProvider (). CreateCompiler ()); // Setting the compilation parameters. CompilerParameters Paras = new compilerParameters (); Paras.GenerateExecutable = false; Paras.GenerateInMemory = true; // Create dynamic code. StringBuilder classSource = new StringBuilder (); classSource.Append ( "public class" className "/ n"); classSource.Append ( "{/ n"); classSource.Append ( "public object" methodName "() / N "); classSource.Append (" {/ n "); classsource.append (" return " expression "; / n "); classsource.append ("} / n "); classsource.append ("} "); //System.diagnostics.debug.writeline (ClassSource.toString ()); // Compile code. CompilerResults Result = Complier.comPileAsessemblyFromSource (Paras, ClassSource.toString ()); // Gets the compiled assembly. AskMBLY Assembly = Result.Compiledassembly; // Dynamic call method. Object evAl = assembly.createInstance (classname); methodinfo method = evAl.gettype (); getMethod (MethodName); object reobj = method.invoke (eval, null); gc.collect (); return reobj;}

}

转载请注明原文地址:https://www.9cbs.com/read-48111.html

New Post(0)