如何用C#动态编译、执行代码例程

         static void Main(string[] args)

        {

            string strCode = @" using System;                    

                                namespace ParseEx                    

                                {                        

                                    public class ParseExC                        

                                    {                            

                                        public static double GetValue()                                                    

                                       {

                                            return result();

                                        }

                                        private static double result()

                                        {

                                            return 1+5*8-(Math.Sin(12));

                                        }

                                     }          

                                }";      

            CodeDomProvider comp  = new CSharpCodeProvider();    

            CompilerParameters cp = new CompilerParameters();  

               

            StringBuilder codeBuilder = new StringBuilder();                

            codeBuilder.AppendLine(strCode);   

            cp.ReferencedAssemblies.Add("System.dll");    

            cp.GenerateExecutable = false;    

            cp.GenerateInMemory   = true;          

            CompilerResults cr = comp.CompileAssemblyFromSource(cp, codeBuilder.ToString());    

            if (cr.Errors.HasErrors)    

            {

                Console.Write("Error!");

            }    

            else   

            {        

                Assembly a = cr.CompiledAssembly;        

                if (a != null)        

                {            

                    Type t = a.GetType("ParseEx.ParseExC");            

                    if (t != null)            

                    {                          

                        // object mode = a.CreateInstance("Mode");                

                        MethodInfo mi = t.GetMethod("GetValue", BindingFlags.Static | BindingFlags.Public);                

                        if (mi != null)                

                        {

                            double d = (double)mi.Invoke(null, null);

                            Console.Write(d.ToString());                

                        }            

                    }        

                }    

            }

        }

测试结果:41.5365

原文地址:https://www.cnblogs.com/yiyi20120822/p/2784431.html