public static CompilationResult GetAssemblyFromCompilation( IAssemblyLoadContext loader, Compilation compilation) { EmitResult result; using (var ms = new MemoryStream()) { using (var pdb = new MemoryStream()) { if (PlatformHelper.IsMono) { result = compilation.Emit(ms, pdbStream: null); } else { result = compilation.Emit(ms, pdbStream: pdb); } if (!result.Success) { var formatter = new DiagnosticFormatter(); var errorMessages = result.Diagnostics .Where(IsError) .Select(d => formatter.Format(d)); return CompilationResult.FromErrorMessages(errorMessages); } ms.Seek(0, SeekOrigin.Begin); Assembly assembly; if (PlatformHelper.IsMono) { assembly = loader.LoadStream(ms, assemblySymbols: null); } else { pdb.Seek(0, SeekOrigin.Begin); assembly = loader.LoadStream(ms, pdb); } return CompilationResult.FromAssembly(assembly); } } }
public static CompiledAssemblyResult GetAssemblyFromCompilation( [NotNull]CSharpCompilation compilation) { Check.NotNull(compilation, nameof(compilation)); EmitResult result; using (var ms = new MemoryStream()) { using (var pdb = new MemoryStream()) { if (PlatformHelper.IsMono) { result = compilation.Emit(ms, pdbStream: null); } else { result = compilation.Emit(ms, pdbStream: pdb); } if (!result.Success) { var formatter = new DiagnosticFormatter(); var errorMessages = result.Diagnostics .Where(IsError) .Select(d => formatter.Format(d)); return CompiledAssemblyResult.FromErrorMessages(errorMessages); } Assembly assembly; if (PlatformHelper.IsMono) { var assemblyLoadMethod = typeof(Assembly).GetTypeInfo().GetDeclaredMethods("Load") .First( m => { var parameters = m.GetParameters(); return parameters.Length == 1 && parameters[0].ParameterType == typeof(byte[]); }); assembly = (Assembly)assemblyLoadMethod.Invoke(null, new[] { ms.ToArray() }); } else { var assemblyLoadMethod = typeof(Assembly).GetTypeInfo().GetDeclaredMethods("Load") .First( m => { var parameters = m.GetParameters(); return parameters.Length == 2 && parameters[0].ParameterType == typeof(byte[]) && parameters[1].ParameterType == typeof(byte[]); }); assembly = (Assembly)assemblyLoadMethod.Invoke(null, new[] { ms.ToArray(), pdb.ToArray() }); } return CompiledAssemblyResult.FromAssembly(assembly); } } }
protected virtual void PrintError(Diagnostic diagnostic, TextWriter consoleOutput) { consoleOutput.WriteLine(DiagnosticFormatter.Format(diagnostic, Culture)); }
private static DiagnosticResult CreateDiagnosticResult(bool success, IEnumerable<Diagnostic> diagnostics) { var formatter = new DiagnosticFormatter(); var errors = diagnostics.Where(IsError) .Select(d => formatter.Format(d)).ToList(); var warnings = diagnostics.Where(d => d.Severity == DiagnosticSeverity.Warning) .Select(d => formatter.Format(d)).ToList(); return new DiagnosticResult(success, warnings, errors); }
internal static IEnumerable<string> Convert(IEnumerable<Diagnostic> diagnostics) { var formatter = new DiagnosticFormatter(); return diagnostics.Select(d => formatter.Format(d)).ToList(); }
private static AssemblyLoadResult ReportCompilationError(EmitResult result) { #if DESKTOP // TODO: Temporary due to CoreCLR and Desktop Roslyn being out of sync var formatter = DiagnosticFormatter.Instance; #else var formatter = new DiagnosticFormatter(); #endif var errors = new List<string>(result.Diagnostics.Select(d => formatter.Format(d))); return new AssemblyLoadResult(errors); }
public CompilationResult Compile(string content) { var syntaxTrees = new[] { CSharpSyntaxTree.ParseText(content) }; var targetFramework = _environment.TargetFramework; var references = GetApplicationReferences(); var assemblyName = Path.GetRandomFileName(); var compilation = CSharpCompilation.Create(assemblyName, options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary), syntaxTrees: syntaxTrees, references: references); using (var ms = new MemoryStream()) { using (var pdb = new MemoryStream()) { EmitResult result; if (PlatformHelper.IsMono) { result = compilation.Emit(ms, pdbStream: null); } else { result = compilation.Emit(ms, pdbStream: pdb); } if (!result.Success) { var formatter = new DiagnosticFormatter(); var messages = result.Diagnostics .Where(IsError) .Select(d => GetCompilationMessage(formatter, d)) .ToList(); return CompilationResult.Failed(content, messages); } Assembly assembly; ms.Seek(0, SeekOrigin.Begin); if (PlatformHelper.IsMono) { assembly = _loader.LoadStream(ms, pdbStream: null); } else { pdb.Seek(0, SeekOrigin.Begin); assembly = _loader.LoadStream(ms, pdb); } var type = assembly.GetExportedTypes() .First(); return CompilationResult.Successful(string.Empty, type); } } }
private CompilationMessage GetCompilationMessage(DiagnosticFormatter formatter, Diagnostic diagnostic) { return new CompilationMessage(formatter.Format(diagnostic)); }