private bool GenerateCode(IList <string> sources, bool useViewEngine, int iterations, bool dump = false) { if (useViewEngine) { for (var i = 0; i < sources.Count; i++) { var source = sources[i]; var relativePath = source.Substring(BasePath.Length).Replace('\\', '/'); Console.WriteLine($"Creating view {relativePath}"); for (var j = 0; j < iterations; j++) { var view = ViewEngine.GetView(null, relativePath, isMainPage: true); view.EnsureSuccessful(new string[0]); GC.KeepAlive(view.View); if (j > 0 && j % 10 == 0) { Console.WriteLine($"Completed iteration {j}"); } } } } else { for (var i = 0; i < sources.Count; i++) { var source = sources[i]; var relativePath = source.Substring(BasePath.Length); var fileNameNoExtension = Path.GetFileNameWithoutExtension(source); Console.WriteLine($"Generating {source}"); using (var stream = new FileStream(source, FileMode.Open)) { for (var j = 0; j < iterations; j++) { var codeDocument = CompilationService.CreateCodeDocument(relativePath, stream); var result = CompilationService.ProcessCodeDocument(codeDocument); if (result.Diagnostics.Count > 0) { Console.WriteLine($"Code generation failed for {source}"); foreach (var error in result.GeneratedCode) { Console.WriteLine("\t" + error); } return(false); } if (j > 0 && j % 10 == 0) { Console.WriteLine($"Completed iteration {j}"); } if (dump && j == iterations - 1) { var output = Path.ChangeExtension(source, ".cs"); Console.WriteLine($"Dumping generated code to {output}"); File.WriteAllText(output, result.GeneratedCode); } } stream.Seek(0L, SeekOrigin.Begin); } } } return(true); }