public RunningResults RunCsc(string submissionCompilationDirectory) { log.Info($"Запускаю проверку C#-решения {submission.Id}, компилирую с помощью Roslyn"); var res = AssemblyCreator.CreateAssemblyWithRoslyn((FileRunnerSubmission)submission, submissionCompilationDirectory, settings.CompilationTimeLimit); try { metricSender.SendCount("exercise.compilation.csc.elapsed", (int)res.Elapsed.TotalMilliseconds); var diagnostics = res.EmitResult.Diagnostics; var compilationOutput = diagnostics.DumpCompilationOutput(); if (diagnostics.HasErrors()) { log.Error($"Ошибка компиляции:\n{compilationOutput}"); return(new RunningResults(Verdict.CompilationError, compilationOutput: compilationOutput)); } if (!submission.NeedRun) { return(new RunningResults(Verdict.Ok)); } return(RunSandbox($"\"{Path.GetFullPath(res.PathToAssembly)}\" {submission.Id}")); } finally { SafeRemoveFile(res.PathToAssembly); } }
public RunningResults RunCsc60(string submissionCompilationDirectory) { log.Info($"Запускаю проверку C#-решения {submission.Id}, компилирую с помощью Roslyn"); var res = AssemblyCreator.CreateAssemblyWithRoslyn((FileRunnerSubmission)submission, submissionCompilationDirectory); result.Verdict = Verdict.Ok; result.AddCompilationInfo(res.EmitResult.Diagnostics); if (result.IsCompilationError()) { log.Error($"Ошибка компиляции:\n{result.CompilationOutput}"); SafeRemoveFile(res.PathToAssembly); return(result); } if (!submission.NeedRun) { SafeRemoveFile(res.PathToAssembly); return(result); } var valueTupleDllPath = Path.Combine(submissionCompilationDirectory, "System.ValueTuple.dll"); SafeCopyFileIfNotExists(typeof(ValueTuple).Assembly.Location, valueTupleDllPath); RunSandboxer($"\"{Path.GetFullPath(res.PathToAssembly)}\" {submission.Id}"); SafeRemoveFile(res.PathToAssembly); SafeRemoveFile(valueTupleDllPath); return(result); }