private byte[] GenerateFromHost() { var projectDirectory = Path.GetDirectoryName(GetProject().FullName); var projectRelativePath = InputFilePath.Substring(projectDirectory.Length); using (var hostManager = new HostManager(projectDirectory)) { var host = hostManager.CreateHost(InputFilePath, projectRelativePath, GetCodeProvider()); host.DefaultNamespace = FileNameSpace; host.Error += (o, eventArgs) => { GeneratorError(0, eventArgs.ErrorMessage, eventArgs.LineNumber, eventArgs.ColumnNumber); }; host.Progress += (o, eventArgs) => { if (CodeGeneratorProgress != null) { CodeGeneratorProgress.Progress(eventArgs.Completed, eventArgs.Total); } }; var content = host.GenerateCode(); return ConvertToBytes(content); } }
private bool ExecuteCore() { if (FilesToPrecompile == null || !FilesToPrecompile.Any()) { return true; } string projectRoot = String.IsNullOrEmpty(ProjectRoot) ? Directory.GetCurrentDirectory() : ProjectRoot; using (var hostManager = new HostManager(projectRoot)) { foreach (var file in FilesToPrecompile) { string filePath = file.GetMetadata("FullPath"); string fileName = Path.GetFileName(filePath); var projectRelativePath = GetProjectRelativePath(filePath, projectRoot); string itemNamespace = GetNamespace(file, projectRelativePath); string outputPath = Path.Combine(CodeGenDirectory, projectRelativePath.TrimStart(Path.DirectorySeparatorChar)) + ".cs"; if (!RequiresRecompilation(filePath, outputPath)) { Log.LogMessage(MessageImportance.Low, "Skipping file {0} since {1} is already up to date", filePath, outputPath); continue; } EnsureDirectory(outputPath); Log.LogMessage(MessageImportance.Low, "Precompiling {0} at path {1}", filePath, outputPath); var host = hostManager.CreateHost(filePath, projectRelativePath, itemNamespace); bool hasErrors = false; host.Error += (o, eventArgs) => { Log.LogError("RazorGenerator", eventArgs.ErorrCode.ToString(), helpKeyword: "", file: file.ItemSpec, lineNumber: (int)eventArgs.LineNumber, columnNumber: (int)eventArgs.ColumnNumber, endLineNumber: (int)eventArgs.LineNumber, endColumnNumber: (int)eventArgs.ColumnNumber, message: eventArgs.ErrorMessage); hasErrors = true; }; try { string result = host.GenerateCode(); if (!hasErrors) { // If we had errors when generating the output, don't write the file. File.WriteAllText(outputPath, result); } } catch (Exception exception) { Log.LogErrorFromException(exception, showStackTrace: true, showDetail: true, file: null); return false; } if (hasErrors) { return false; } var taskItem = new TaskItem(outputPath); taskItem.SetMetadata("AutoGen", "true"); taskItem.SetMetadata("DependentUpon", "fileName"); _generatedFiles.Add(taskItem); } } return true; }