public string Execute(string code) { var task = Task<string>.Factory.StartNew(() => { try { if (!Validate(code)) return "Not implemeted"; var e = new Evidence(); e.AddHostEvidence(new Zone(SecurityZone.Untrusted)); var ps = SecurityManager.GetStandardSandbox(e); var security = new SecurityPermission(SecurityPermissionFlag.NoFlags); ps.AddPermission(security); var setup = new AppDomainSetup { ApplicationBase = Environment.CurrentDirectory }; var domain = AppDomain.CreateDomain("Sandbox", e, setup, ps); AppDomain.CurrentDomain.AssemblyResolve += DomainAssemblyResolve; using (var memoryStream = new MemoryStream()) { var defaultReferences = new[] {"System"}; var defaultNamespaces = new[] { "System" }; CommonScriptEngine engine = new ScriptEngine(defaultReferences, defaultNamespaces); var options = new ParseOptions(kind: SourceCodeKind.Script, languageVersion: LanguageVersion.CSharp6); foreach (var ns in defaultNamespaces) engine.Execute(string.Format("using {0};", ns), Session); byte[] assembly = null; var resultCode = engine.CompileSubmission<object>(code, Session); resultCode.Compilation.Emit(memoryStream); assembly = memoryStream.ToArray(); //var compilationSubmission = Engine.CompileSubmission<dynamic>(code, Session); //compilationSubmission.Compilation.AddReferences(new AssemblyNameReference("System.IO, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")); //compilationSubmission.Compilation.Emit(memoryStream); domain.Load("mscorlib"); domain.Load("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); domain.Load("Microsoft.Csharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); domain.Load("Roslyn.Compilers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); domain.Load("Roslyn.Compilers.Csharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); _dynamicAssembly = Assembly.Load(assembly); var loaded = domain.Load(assembly); var submission = loaded.GetTypes().Where(x => x.Name.Contains("Submission")).Last(); var methods = submission.GetMethods(); var result = methods.Where(x => x.Name.Contains("Factory")).First().Invoke(submission, new[] { Session }); if (result != null) return result.ToString(); AppDomain.Unload(domain); } } catch (Exception ex) { return ex.ToString(); } return null; }); var finished = task.Wait(10000); if (finished) return task.Result; return "Timeout"; }