Пример #1
0
        public async Task <bool> TryCompileToStreamAsync(MemoryStream assemblyStream, MemoryStream symbolStream, IWorkSession session, IList <Diagnostic> diagnostics, CancellationToken cancellationToken)
        {
            if (session.IsFSharp())
            {
                return(await TryCompileFSharpToStreamAsync(assemblyStream, session, diagnostics, cancellationToken));
            }

            if (session.IsPhp())
            {
                return(TryCompilePhpToStreamAsync(assemblyStream, symbolStream, session, diagnostics));
            }

            var compilation = await session.Roslyn.Project.GetCompilationAsync(cancellationToken).ConfigureAwait(false);

            var emitResult = compilation.Emit(assemblyStream, pdbStream: symbolStream);

            if (!emitResult.Success)
            {
                foreach (var diagnostic in emitResult.Diagnostics)
                {
                    diagnostics.Add(diagnostic);
                }
                return(false);
            }
            return(true);
        }