示例#1
0
        static int Main(string[] args)
        {
            var parsedArgs = ProgramArgs.Parse(args);
            if (parsedArgs == null)
            {
                return (int)ExitCodes.QuackQuackQuaaack;
            }

            if (parsedArgs.HelpRequested)
            {
                return (int)ExitCodes.LuckyDuck;
            }

            if (!parsedArgs.NoSplash)
            {
                new Splash().Print();
            }

            if (parsedArgs.OutputFolder == null)
            {
                return Error("output folder is required.");
            }

            var outputDirectory = new DirectoryInfo(parsedArgs.OutputFolder);
            if (!outputDirectory.Exists)
            {
                outputDirectory.Create();
                Thread.Sleep(100);
            }

            if (parsedArgs.DocsSources != null && parsedArgs.DocsSources.Count > 0)
            {
                var converter = new StaticPageConverter();
                foreach (var docSource in parsedArgs.DocsSources)
                {
                    var request = new StaticPageConverterRequest {
                         Recursive = true,
                         RelativeDestination = outputDirectory.FullName,
                         Source = docSource
                    };
                    var result = converter.Convert(request).ToList();

                    ColorConsole.WriteLine("[Complete]: ".Green(), "batch content file".ToQuantity(result.Count));
                }
            }

            if (parsedArgs.TargetAssemblies != null && parsedArgs.TargetAssemblies.Count > 0)
            {
                var targetAssemblies = parsedArgs.TargetAssemblies
                    .Select(f => Assembly.ReflectionOnlyLoadFrom(new FileInfo(f).FullName))
                    .ToList();
                var xmlFiles = (parsedArgs.XmlDocLocations ?? Enumerable.Empty<string>())
                    .SelectMany(loc => {
                        var fi = new FileInfo(loc);
                        if (fi.Exists)
                        {
                            return new[] { fi };
                        }

                        var di = new DirectoryInfo(loc);
                        if (di.Exists)
                        {
                            return di.EnumerateFiles("*.xml");
                        }

                        return Enumerable.Empty<FileInfo>();
                    })
                    .Select(fi => new XmlAssemblyDocument(fi.FullName))
                    .ToList();

                var repository = new ReflectionCodeDocMemberRepository(
                    new ReflectionCRefLookup(targetAssemblies),
                    xmlFiles);

                var supportRepository = new MsdnCodeDocMemberRepository();

                var apiOutputDirectory = new DirectoryInfo(Path.Combine(parsedArgs.OutputFolder, "api"));
                if (!apiOutputDirectory.Exists)
                {
                    apiOutputDirectory.Create();
                    Thread.Sleep(100);
                }

                var generator = new StaticApiPageGenerator {
                    OutputDirectory = apiOutputDirectory,
                    TemplateDirectory = new DirectoryInfo(parsedArgs.TemplatesDirectory ?? "./"),
                    TargetRepository = repository,
                    SupportingRepository = supportRepository
                };

                var results = generator.GenerateForAllTargets().ToList();

                ColorConsole.WriteLine("[Complete]: ".Green(), "api doc file".ToQuantity(results.Count));
            }

            return (int)ExitCodes.LuckyDuck;
        }
 /// <summary>
 /// Creates a new member generator using the given repository and search context.
 /// </summary>
 /// <param name="repository">The repository that is used to generate the models.</param>
 /// <param name="searchContext">The search context used to get other models from.</param>
 public MemberGenerator(ReflectionCodeDocMemberRepository repository, CodeDocRepositorySearchContext searchContext)
     : base(repository, searchContext)
 {
     Contract.Requires(repository != null);
 }