public virtual void CompileToStream() { if (PreCompiler()) { var compilation = GetCompilation(); MemoryStream stream = new MemoryStream(); var CompileResult = EmitToStream(compilation, stream); if (CompileResult.Success) { stream.Position = 0; MemoryStream copyStream = new MemoryStream(); stream.CopyTo(copyStream); stream.Position = 0; Assembly = Domain.CompileStreamHandler(stream, AssemblyName); StreamCompileSucceedHandler?.Invoke(copyStream, compilation); copyStream.Dispose(); } else { stream.Position = 0; StreamCompileFailedHandler?.Invoke(stream, CompileResult.Diagnostics, compilation); } stream.Dispose(); } }
public virtual void CompileToStream() { if (PreCompiler()) { var options = GetCompilationOptions(); OptionAction?.Invoke(options); var compilation = GetCompilation(options); MemoryStream stream = new MemoryStream(); var CompileResult = CompileEmitToStream(compilation, stream); if (CompileResult.Success) { stream.Seek(0, SeekOrigin.Begin); MemoryStream copyStream = new MemoryStream(); stream.CopyTo(copyStream); stream.Seek(0, SeekOrigin.Begin); AssemblyResult = Domain.CompileStreamHandler(stream, AssemblyName); StreamCompileSucceedHandler?.Invoke(copyStream, compilation); copyStream.Dispose(); } else { stream.Seek(0, SeekOrigin.Begin); StreamCompileFailedHandler?.Invoke(stream, CompileResult.Diagnostics, compilation); } stream.Dispose(); } }
public virtual Assembly ComplieToAssembly(IEnumerable <SyntaxTree> trees) { Assembly assembly = null; EmitResult compileResult = null; if (PreCompiler()) { if (trees == default) { return(null); } var options = GetCompilationOptions(); OptionAction?.Invoke(options); Compilation = GetCompilation(options); Compilation = (TCompilation)Compilation.AddSyntaxTrees(trees); foreach (var item in _semanticAnalysistor) { Compilation = item(Compilation); } Stream outputStream = new MemoryStream(); if (AssemblyOutputKind == AssemblyBuildKind.File) { outputStream = File.Create(DllPath); using (var pdbStream = File.Create(PdbPath)) { compileResult = Compilation.Emit( outputStream, pdbStream: pdbStream, options: new EmitOptions(pdbFilePath: PdbPath, debugInformationFormat: DebugInformationFormat.PortablePdb)); } } else { compileResult = Compilation.Emit( outputStream, options: new EmitOptions(false, debugInformationFormat: DebugInformationFormat.PortablePdb)); } if (compileResult.Success) { Compilation.RemoveAllSyntaxTrees(); outputStream.Seek(0, SeekOrigin.Begin); MemoryStream copyStream = new MemoryStream(); outputStream.CopyTo(copyStream); outputStream.Seek(0, SeekOrigin.Begin); assembly = Domain.CompileStreamCallback(outputStream, AssemblyName); if (AssemblyOutputKind == AssemblyBuildKind.File) { FileCompileSucceedHandler?.Invoke(DllPath, PdbPath, Compilation); } else { StreamCompileSucceedHandler?.Invoke(copyStream, Compilation); } copyStream.Dispose(); } else { assembly = CompileFailedHandler?.Invoke(outputStream, compileResult.Diagnostics, Compilation); } outputStream.Dispose(); } return(assembly); }