/// <summary> /// Generate code for the given types. /// </summary> public static void Generate(string folder, List <NetTypeDefinition> types, List <NetCustomAttribute> assemblyAttributes, IDocTypeNameResolver resolver, ICodeGeneratorContext context, TargetFramework target) { // Clean foreach (var iterator in context.PossibleNamespaceRoots) { var root = iterator; var path = Path.Combine(folder, root + ".cs"); File.Delete(path); } // Select namespace roots var roots = types.Select(context.GetNamespaceRoot).Distinct().ToList(); // Save var addAssemblyAttributes = true; foreach (var iterator in roots) { var root = iterator; var path = Path.Combine(folder, root + ".cs"); using (var writer = new StreamWriter(path, false, Encoding.UTF8, 128 * 1024)) { GenerateHeader(writer, context); var selectedTypes = types.Where(x => context.GetNamespaceRoot(x) == root); var generator = new CodeGenerator(writer, resolver, context, target); if (addAssemblyAttributes) { generator.GenerateAssemblyAttributes(assemblyAttributes); addAssemblyAttributes = false; } generator.Generate(selectedTypes); } } }