public virtual void CompileToFile(string dllPath, string pdbPath) { if (PreCompiler()) { var compilation = GetCompilation(); var CompileResult = compilation.Emit(dllPath, pdbPath); if (CompileResult.Success) { Assembly = Domain.CompileFileHandler(dllPath, pdbPath, AssemblyName); FileCompileSucceedHandler?.Invoke(dllPath, pdbPath, compilation); } else { FileCompileFailedHandler?.Invoke(dllPath, pdbPath, CompileResult.Diagnostics, compilation); } } }
public virtual void CompileToFile() { if (PreCompiler()) { var options = GetCompilationOptions(); OptionAction?.Invoke(options); var compilation = GetCompilation(options); var CompileResult = CompileEmitToFile(compilation); if (CompileResult.Success) { AssemblyResult = Domain.CompileFileHandler(DllPath, PdbPath, AssemblyName); FileCompileSucceedHandler?.Invoke(DllPath, PdbPath, compilation); } else { FileCompileFailedHandler?.Invoke(DllPath, PdbPath, CompileResult.Diagnostics, compilation); } } }
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); }