Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }