动态编译C# 代码

很多时候需要将某段C# 代码写在配置文件中,后续需要时进行编译;
比如,在配置文件中配置上“"echo.shine"=="echo.shine"”,然后将此段配置文件放进下面的方法中进行编译,就会得出true的值。
 
View Code
public static bool getExpressionValue(string expression)
       {
           CSharpCodeProvider provider = new CSharpCodeProvider();
           CompilerParameters parameter = new CompilerParameters();
           parameter.ReferencedAssemblies.Add("System.dll");
           parameter.GenerateExecutable = false;
           parameter.GenerateInMemory = true;

           var comp_string = @"
            using System; 
            namespace ANameSpace
            {
                static class AClass
                {
                    public static object AFunc()
                    {return 
" + expression + @";}
                }
            }
";
           CompilerResults result = provider.CompileAssemblyFromSource(parameter,
               comp_string);
           if (result.Errors.Count > 0)
           {
               return false;
           }
           else
           {
               Assembly assembly = result.CompiledAssembly;
               Type AType = assembly.GetType("ANameSpace.AClass");
               MethodInfo method = AType.GetMethod("AFunc");
               return Convert.ToBoolean(method.Invoke(nullnull));
           }
       }
这是很简单的代码,在动态编译中比较实用
posted @ 2012-11-06 16:36  水月小妖  阅读(195)  评论(0编辑  收藏  举报