public void buildFiles() { if (Files == null) { throw new InvalidProgramException("must specify which files to compile"); } var actualFiles = Files.ToArray(); if (actualFiles.Length == 0) { throw new InvalidProgramException($"must specify which files to compile"); } var asExe = actualFiles .Where(path => Path .GetFileName(path) .Equals("Program.cs")) .Any(); if (Extensions == null) { var exePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); Extensions = directoryExtensions(exePath); } var compilation = new ExcessCompilation( analysis: new CompilationAnalysis(), extensions: Extensions, executable: asExe); foreach (var file in actualFiles) { if (file.EndsWith(".xs.cs")) { continue; } var ext = Path.GetExtension(file); switch (ext) { case ".cs": compilation.addCSharpFile(file); break; case ".xs": compilation.addDocument(file); break; default: throw new InvalidOperationException($"invalid extension: {ext}"); } } var errors = null as IEnumerable <Diagnostic>; var result = compilation.build(out errors); if (Transpile) { foreach (var document in compilation.Documents()) { var filename = compilation.DocumentFileName(document) + ".cs"; Console.WriteLine($"Generated: {filename}"); var text = document.SyntaxRoot.NormalizeWhitespace().ToFullString(); File.WriteAllText(filename, text); } foreach (var file in compilation.getCSharpFiles()) { var filename = Path.Combine(_directory, file.Key); if (!File.Exists(file.Key) && !File.Exists(filename)) { Console.WriteLine($"Generated: {filename}"); var text = file.Value.GetRoot().NormalizeWhitespace().ToFullString(); File.WriteAllText(filename, text); } } } else if (result != null) { var outputPath = OutputPath; if (outputPath == null) { outputPath = Path.Combine( _directory, Path.GetFileName(_directory)); } if (Path.GetExtension(outputPath) == string.Empty) { outputPath = outputPath + (asExe ? ".exe" : ".dll"); } Debug.Assert(outputPath != null); outputPath = Path.GetFullPath(outputPath); File.WriteAllBytes(outputPath, result.GetBuffer()); Console.WriteLine($"Successfully built: {outputPath}"); } if (errors.Any()) { foreach (var error in errors) { Console.Error.WriteLine(error.ToString()); } } }