/// <summary> /// The compile operation to compile the requested code unit. /// </summary> /// <param name="compileRequest"> /// The compile request. /// </param> /// <returns> /// The <see cref="CompileResponse"/>. /// </returns> public CompileResponse Compile(CompileRequest compileRequest) { // TODO: Future version execution /* * FlowRequirement requirement = new FlowRequirement(compileRequest.SourceCode); * ExecutionFlowBuilder.Build().Execute(ContextProvider.Context, requirement); * */ ICompiler csharpCompiler = new CompilerEngine(); CompileArgs arguments = new CompileArgs { SourceCode = compileRequest.SourceCode }; var result = csharpCompiler.Compile(arguments); return(new CompileResponse { CompileResult = result }); }
public static ABIExitCode Compile(ABIFileSystemOptions options, LogFactory factory) { #region Argument exceptions if (options == null) { throw new ArgumentNullException(nameof(options)); } if (factory == null) { throw new ArgumentNullException(nameof(factory)); } #endregion _logger = factory.GetCurrentClassLogger(); _logger.Debug(options); try { if (!Validate(options)) { return(ABIExitCode.ErrorDuringValidation); } var engine = new CompilerEngine(options, factory); var result = engine.Compile(); Debug.Assert(result != ABIExitCode.ErrorExitCodeUnassigned); return(result); } catch (Exception ex) // avoid external unhandled exceptions { _logger.Error(ex); } return(ABIExitCode.ErrorUnhandledException); }
public void Run() { StringBuilder sb = new StringBuilder(); sb.Append("using CodeRank.CSharpProblems.Ruleset.Base;"); sb.Append("namespace CodeRank.CSharpProblems.Ruleset.Solution"); sb.Append("{"); sb.Append("public class SampleTestRuleSolution : ISampleTest"); sb.Append("{"); sb.Append("public int Sum(int a, int b)"); sb.Append("{"); sb.Append("return a + b;"); sb.Append("}"); sb.Append("}"); sb.Append("}"); CompilerEngine engine = new CompilerEngine(); var response = engine.Compile(new CompileArgs { SourceCode = sb.ToString() }); string pathToDlls = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath); var assemblyFilePath = Path.Combine(pathToDlls, response.AssemblyFileName); Console.WriteLine(AppDomain.CurrentDomain.FriendlyName); AppDomain.CurrentDomain.Load(response.LoadedStream.ToArray()); CoreExtensions.Host.InstallBuiltins(); var runner = new InMemoryNunitTestRunner().RunTests(new TestRunRequest { TestAssembly = Assembly.Load("CodeRank.CSharpProblems.Ruleset"), SourceAssemblyStream = response.LoadedStream }); Console.WriteLine(runner); Console.Read(); }