C# 动态编译

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.CodeAssembly_1();
        }
         static void CodeAssembly_1()
        {
            CSharpCodeProvider cSharpCodeProvider = new CSharpCodeProvider();

            CompilerParameters parameters = new CompilerParameters();

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

            parameters.GenerateExecutable = false;

            parameters.GenerateInMemory = true;

            CompilerResults cs = cSharpCodeProvider.CompileAssemblyFromSource(parameters, GetCode_1("\"大狮子\""));

            if (cs.Errors.Count>0)
            {
                Console.WriteLine(cs.Errors.ToString());
                Console.ReadKey();
            }
             else
            {
                Assembly assembly = cs.CompiledAssembly;
                Type AType = assembly.GetType("ConsoleApplication1.Class_1");
                MethodInfo method = AType.GetMethod("Func");
                Console.WriteLine(method.Invoke(null, null));
                Console.ReadKey();
            }

                
        }
        private static string GetCode_1(string para)
        {

            StringBuilder codes = new StringBuilder();

            //引用

            codes.Append("using System; ");

            //命名空间定义

            codes.Append("namespace ConsoleApplication1");

            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());

        }

        
    }
}

posted @ 2015-03-16 09:01  小宝陛下  阅读(150)  评论(0)    收藏  举报