Exemplo n.º 1
0
        public LoadResult Load(Stream templateStream)
        {
            if (templateStream == null)
            {
                throw new ArgumentNullException(nameof(templateStream));
            }

            if (!templateStream.CanRead || !templateStream.CanSeek)
            {
                throw new ArgumentException("The supplied stream must be readable and seekable", nameof(templateStream));
            }

            if (_loadCalled)
            {
                throw new InvalidOperationException("Cannot call Load more than once");
            }

            _loadCalled = true;

            _razorEngineRendererHost = new AppDomainIsolatedHost <RazorEngineRenderer>();

            _encoding = TextEncodingDetector.GetEncoding(templateStream);

            using (var reader = new StreamReader(templateStream))
            {
                _loadedTemplate = reader.ReadToEnd();
            }

            RazorTemplateLoadResult razorTemplateLoadResult;

            try
            {
                _razorEngineRenderer    = _razorEngineRendererHost.CreateHostedInstance();
                razorTemplateLoadResult = _razorEngineRenderer.LoadTemplate(_loadedTemplate);
            }
            catch (TemplateParsingException ex)
            {
                razorTemplateLoadResult = new RazorTemplateLoadResult(
                    RazorTemplateLoadResult.LoadResultStatus.CodeGenerationFailed,
                    new[] { $"Code Generation Error: {ex.Message} (at line {ex.Line}, column {ex.Column}" });
            }
            catch (TemplateCompilationException ex)
            {
                razorTemplateLoadResult = new RazorTemplateLoadResult(
                    RazorTemplateLoadResult.LoadResultStatus.CodeCompilationFailed,
                    ex.CompilerErrors.Select(e => $"Code Compilation Error: {e.ErrorNumber}: {e.ErrorText} (at line {e.Line}, column {e.Column})").ToArray());
            }
            catch (Exception ex)
            {
                razorTemplateLoadResult = new RazorTemplateLoadResult(
                    RazorTemplateLoadResult.LoadResultStatus.CodeCompilationFailed,
                    new [] { $"Exception while compiling template: {ex}" });
            }

            return(MapToLoadResult(razorTemplateLoadResult));
        }
        public static GeneratedFile ShouldHaveEncoding([NotNull] this GeneratedFile result, [NotNull] Encoding expectedEncoding)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (expectedEncoding == null)
            {
                throw new ArgumentNullException(nameof(expectedEncoding));
            }

            var actual = TextEncodingDetector.GetEncoding(result.FullPath);

            if (actual != expectedEncoding)
            {
                throw new SpecificationException($"Incorrect encoding for configuration '{result.ConfigurationName}'. Expected {expectedEncoding}, but was {actual}.");
            }

            return(result);
        }