当前位置:编程学习 > C#/ASP.NET >>

C# 动态编译及反射执行

#region 程序集1 无参数、静态类下的静态方法

        static void CodeAssembly_1()
        {
            //提供对 C# 代码生成器和代码编译器的实例的访问。
            CSharpCodeProvider provider = new CSharpCodeProvider();

            //表示用于调用编译器的参数
            CompilerParameters parameter = new CompilerParameters();
            //获取当前项目所引用的程序集。
            parameter.ReferencedAssemblies.Add("System.dll");
            //获取或设置一个值,该值指示是否生成可执行文件。
            parameter.GenerateExecutable = false;
            //获取或设置一个值,该值指示是否在内存中生成输出。
            parameter.GenerateInMemory = true;

            //使用指定的编译器设置,从包含源代码的字符串的指定数组,编译程序集。返回编译结果。
            CompilerResults result = provider.CompileAssemblyFromSource(parameter,
                GetCode_1("120/12"));//将你的式子放在这里
            //获取编译器错误和警告的集合
            if (result.Errors.Count > 0)
            {
                Console.WriteLine("动态编译出错了!");
            }
            else
            {
                //获取或设置已编译的程序集。
                Assembly assembly = result.CompiledAssembly;
                //获取当前实例的 Type
                Type AType = assembly.GetType("NameSpace_1.Class_1");
                //获取类型的方法
                MethodInfo method = AType.GetMethod("Func");
                //调用方法
                Console.WriteLine(method.Invoke(null, null));
            }
            Console.Read();
        }
        //获取代码
        private static string GetCode_1(string para)
        {
            StringBuilder codes = new StringBuilder();
            //引用
            codes.Append("using System; ");
            //命名空间定义
            codes.Append("namespace NameSpace_1");
            codes.Append("{");
            //类定义
            codes.Append("  public class Class_1");
            codes.Append("  {");
            //方法定义
            codes.Append("      public static object Func()");
            codes.Append("      {");
            codes.Append("          return (" + para + ");");
            codes.Append("      }");
            codes.Append("  }");
            codes.Append("}");

            return (codes.ToString());
        }

        #endregion

 

 

 

        #region 程序集2 含构造函数类需要生成实例对象后调用还参数方法

        static void CodeAssembly_2()
        {
            //提供对 C# 代码生成器和代码编译器的实例的访问。
            CSharpCodeProvider provider = new CSharpCodeProvider();

            //表示用于调用编译器的参数
            CompilerParameters parameter = new CompilerParameters();
            //获取当前项目所引用的程序集。
            parameter.ReferencedAssemblies.Add("System.dll");
            //获取或设置一个值,该值指示是否生成可执行文件。
            parameter.GenerateExecutable = false;
            //获取或设置一个值,该值指示是否在内存中生成输出。
            parameter.GenerateInMemory = true;

            //使用指定的编译器设置,从包含源代码的字符串的指定数组,编译程序集。返回编译结果。
            CompilerResults result = provider.CompileAssemblyFromSource(parameter, GetCode_2());
            //获取编译器错误和警告的集合
 &nb

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,