private void EvaluateDiagnostics <TReturn>(Script <TReturn> script) { var orderedDiagnostics = script.GetDiagnostics(); var suppressedDiagnostics = orderedDiagnostics.Where(d => SuppressedDiagnosticIds.Contains(d.Id)); foreach (var suppressedDiagnostic in suppressedDiagnostics) { _logger.Debug($"Suppressed diagnostic {suppressedDiagnostic.Id}: {suppressedDiagnostic.ToString()}"); } if (orderedDiagnostics.Except(suppressedDiagnostics).Any(d => d.Severity == DiagnosticSeverity.Error)) { throw new CompilationErrorException("Script compilation failed due to one or more errors.", orderedDiagnostics.ToImmutableArray()); } }
public virtual ScriptCompilationContext <TReturn> CreateCompilationContext <TReturn, THost>(ScriptContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } _logger.Info($"Current runtime is '{_scriptEnvironment.PlatformIdentifier}'."); RuntimeDependency[] runtimeDependencies = GetRuntimeDependencies(context); var encoding = context.Code.Encoding ?? Encoding.UTF8; // encoding is required when emitting debug information var scriptOptions = CreateScriptOptions(context, runtimeDependencies.ToList()); var loadedAssembliesMap = CreateLoadedAssembliesMap(); var scriptDependenciesMap = CreateScriptDependenciesMap(runtimeDependencies); scriptOptions = AddScriptReferences(scriptOptions, loadedAssembliesMap, scriptDependenciesMap); AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => MapUnresolvedAssemblyToRuntimeLibrary(scriptDependenciesMap, loadedAssembliesMap, args); string code = GetScriptCode(context); var loader = new InteractiveAssemblyLoader(); var script = CSharpScript.Create <TReturn>(code, scriptOptions, typeof(THost), loader); SetCompilationOptions(context, script); var orderedDiagnostics = script.GetDiagnostics(); var suppressedDiagnostics = orderedDiagnostics.Where(d => SuppressedDiagnosticIds.Contains(d.Id)); foreach (var suppressedDiagnostic in suppressedDiagnostics) { _logger.Debug($"Suppressed diagnostic {suppressedDiagnostic.Id}: {suppressedDiagnostic.ToString()}"); } var nonSuppressedDiagnostics = orderedDiagnostics.Except(suppressedDiagnostics).ToArray(); return(new ScriptCompilationContext <TReturn>(script, context.Code, loader, scriptOptions, runtimeDependencies, nonSuppressedDiagnostics)); }