コード例 #1
0
 internal static IEmitResult Emit(this ICompilation compilation)
 {
     using (var stream = new MemoryStream())
     {
         return(compilation.Emit(stream));
     }
 }
コード例 #2
0
        private MethodInfo CreateFunctionTarget(CancellationToken cancellationToken)
        {
            MemoryStream assemblyStream = null;
            MemoryStream pdbStream      = null;

            try
            {
                ICompilation      compilation       = _compilationService.GetFunctionCompilation(Metadata);
                FunctionSignature functionSignature = compilation.GetEntryPointSignature(_functionEntryPointResolver);

                ImmutableArray <Diagnostic> bindingDiagnostics = ValidateFunctionBindingArguments(functionSignature, throwIfFailed: true);
                TraceCompilationDiagnostics(bindingDiagnostics);

                using (assemblyStream = new MemoryStream())
                {
                    using (pdbStream = new MemoryStream())
                    {
                        compilation.Emit(assemblyStream, pdbStream, cancellationToken);

                        // Check if cancellation was requested while we were compiling,
                        // and if so quit here.
                        cancellationToken.ThrowIfCancellationRequested();

                        Assembly assembly = Assembly.Load(assemblyStream.GetBuffer(), pdbStream.GetBuffer());
                        _assemblyLoader.CreateOrUpdateContext(Metadata, assembly, _metadataResolver, TraceWriter);

                        // Get our function entry point
                        _functionSignature = functionSignature;
                        System.Reflection.TypeInfo scriptType = assembly.DefinedTypes
                                                                .FirstOrDefault(t => string.Compare(t.Name, functionSignature.ParentTypeName, StringComparison.Ordinal) == 0);

                        return(_functionEntryPointResolver.GetFunctionEntryPoint(scriptType.DeclaredMethods.ToList()));
                    }
                }
            }
            catch (CompilationErrorException ex)
            {
                TraceWriter.Error("Function compilation error");
                TraceCompilationDiagnostics(ex.Diagnostics);
                throw;
            }
        }