private static List <Task <GenerationResult> > ProcessFilesInDir(string dir, string inputDir, string outputDir) { var tasks = new List <Task <GenerationResult> >(); foreach (var fi in Directory.EnumerateFiles(dir, "*.json")) { // ../Geometry/Vector3.json => Geometry/ var schemaSubDir = Path.GetDirectoryName(fi).Replace(inputDir, "."); var outDir = Path.GetFullPath(Path.Combine(outputDir, schemaSubDir)); if (!Directory.Exists(outDir)) { Console.WriteLine($"Creating a new directory {outDir}..."); Directory.CreateDirectory(outDir); } var classPath = Path.Combine(outDir, Path.GetFileNameWithoutExtension(fi) + ".g.cs"); if (File.Exists(classPath)) { File.Delete(classPath); } var schema = File.ReadAllText(fi); tasks.Add(TypeGenerator.GenerateUserElementTypeFromJsonAsync(schema, outDir)); } return(tasks); }