static void Main(string[] args) { if (args.Length == 0) { DisplayHelp(); return; } var options = ExtractorOptions.ParseCommandLine(args); var layout = new Layout(); var logger = new ConsoleLogger(options.Verbosity); var actions = options. AssembliesToExtract.Select(asm => asm.filename). Select <string, Action>(filename => () => ExtractAssembly(layout, filename, logger, options.NoCache, options.PDB, options.TrapCompression)). ToArray(); foreach (var missingRef in options.MissingReferences) { logger.Log(Severity.Info, " Missing assembly " + missingRef); } var sw = new Stopwatch(); sw.Start(); var piOptions = new ParallelOptions { MaxDegreeOfParallelism = options.Threads }; Parallel.Invoke(piOptions, actions); sw.Stop(); logger.Log(Severity.Info, "Extraction completed in {0}", sw.Elapsed); }
public static ExtractorOptions ParseCommandLine(string[] args) { var options = new ExtractorOptions(); options.Verbosity = Verbosity.Info; options.Threads = System.Environment.ProcessorCount; options.PDB = true; options.TrapCompression = TrapWriter.CompressionMode.Gzip; foreach (var arg in args) { if (arg == "--verbose") { options.Verbosity = Verbosity.All; } else if (arg == "--silent") { options.Verbosity = Verbosity.Off; } else if (arg.StartsWith("--verbosity:")) { options.Verbosity = (Verbosity)int.Parse(arg.Substring(12)); } else if (arg == "--dotnet") { options.AddFrameworkDirectories(true); } else if (arg == "--nocache") { options.NoCache = true; } else if (arg.StartsWith("--threads:")) { options.Threads = int.Parse(arg.Substring(10)); } else if (arg == "--no-pdb") { options.PDB = false; } else { options.AddFileOrDirectory(arg); } } options.AddFrameworkDirectories(false); options.ResolveReferences(); return(options); }