private LoadResult MapToLoadResult([NotNull] RazorTemplateLoadResult razorTemplateLoadResult) { if (razorTemplateLoadResult == null) { throw new ArgumentNullException(nameof(razorTemplateLoadResult)); } var detail = string.Join("\n", razorTemplateLoadResult.Errors ?? new string[0]); Error loadError; switch (razorTemplateLoadResult.Status) { case RazorTemplateLoadResult.LoadResultStatus.Success: return(LoadResult.CreateSuccessResult()); case RazorTemplateLoadResult.LoadResultStatus.CodeCompilationFailed: loadError = new RazorTemplateError(RazorTemplateErrorCodes.CodeCompilationError, detail); break; case RazorTemplateLoadResult.LoadResultStatus.CodeGenerationFailed: loadError = new RazorTemplateError(RazorTemplateErrorCodes.CodeGenerationError, detail); break; default: loadError = new RazorTemplateError(RazorTemplateErrorCodes.GeneralRazorTemplateError, detail); break; } return(LoadResult.CreateFailResult(loadError)); }
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)); }