コード例 #1
0
        /// <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);
                }
            }
        }