public virtual ScriptEmitResult Emit <TReturn, THost>(ScriptContext context) { try { var compilationContext = _scriptCompiler.CreateCompilationContext <TReturn, THost>(context); var compilation = compilationContext.Script.GetCompilation(); var peStream = new MemoryStream(); EmitOptions emitOptions = null; if (context.OptimizationLevel == Microsoft.CodeAnalysis.OptimizationLevel.Debug) { emitOptions = new EmitOptions() .WithDebugInformationFormat(DebugInformationFormat.Embedded); } var result = compilation.Emit(peStream, options: emitOptions); if (result.Success) { return(new ScriptEmitResult(peStream, compilation.DirectiveReferences, compilationContext.RuntimeDependencies)); } return(ScriptEmitResult.Error(result.Diagnostics)); } catch (CompilationErrorException e) { foreach (var diagnostic in e.Diagnostics) { _scriptConsole.WriteError(diagnostic.ToString()); } throw; } }
public virtual ScriptEmitResult Emit <TReturn, THost>(ScriptContext context, string assemblyName) { var compilationContext = _scriptCompiler.CreateCompilationContext <TReturn, THost>(context); foreach (var warning in compilationContext.Warnings) { _scriptConsole.WriteHighlighted(warning.ToString()); } if (compilationContext.Errors.Any()) { foreach (var diagnostic in compilationContext.Errors) { _scriptConsole.WriteError(diagnostic.ToString()); } throw new CompilationErrorException("Script compilation failed due to one or more errors.", compilationContext.Errors.ToImmutableArray()); } var compilation = compilationContext.Script.GetCompilation(); compilation = compilation.WithAssemblyName(assemblyName); var peStream = new MemoryStream(); EmitOptions emitOptions = null; if (context.OptimizationLevel == Microsoft.CodeAnalysis.OptimizationLevel.Debug) { emitOptions = new EmitOptions() .WithDebugInformationFormat(DebugInformationFormat.Embedded); } var result = compilation.Emit(peStream, options: emitOptions); if (result.Success) { return(new ScriptEmitResult(peStream, compilation.DirectiveReferences, compilationContext.RuntimeDependencies)); } return(ScriptEmitResult.Error(result.Diagnostics)); }
public virtual ScriptEmitResult Emit <TReturn>(ScriptContext context, string assemblyName = null) { try { var compilationContext = _scriptCompiler.CreateCompilationContext <TReturn, CommandLineScriptGlobals>(context); var compilation = compilationContext.Script.GetCompilation(); if (!string.IsNullOrEmpty(assemblyName)) { var compilationOptions = compilationContext.Script.GetCompilation().Options .WithScriptClassName(assemblyName); compilation = compilationContext.Script.GetCompilation() .WithOptions(compilationOptions) .WithAssemblyName(assemblyName); } var peStream = new MemoryStream(); var pdbStream = new MemoryStream(); var result = compilation.Emit(peStream, pdbStream: pdbStream, options: new EmitOptions(). WithDebugInformationFormat(DebugInformationFormat.PortablePdb)); if (result.Success) { return(new ScriptEmitResult(peStream, pdbStream, compilation.DirectiveReferences)); } return(ScriptEmitResult.Error(result.Diagnostics)); } catch (CompilationErrorException e) { foreach (var diagnostic in e.Diagnostics) { _scriptConsole.WritePrettyError(diagnostic.ToString()); } throw; } }