Exemple #1
0
        static List <AssemblyDefinition> LoadFiles(List <string> files, AssemlyReferenceResolver resolver)
        {
            var assemblies = new List <AssemblyDefinition> ();

            foreach (var file in files)
            {
                if (!File.Exists(file))
                {
                    Console.WriteLine($"File {file} could not be found.");
                    continue;
                }

                var ad = AssemblyDefinition.ReadAssembly(file, resolver.ReaderParameters);
                assemblies.Add(ad);
            }

            return(assemblies);
        }
Exemple #2
0
        static int Main(string[] args)
        {
            bool showUsage = false;
            bool error     = false;

            var runner    = new Runner();
            var analyzers = new List <Analyzer> ();
            var dirs      = new List <string> ();

            var options = new OptionSet {
                { "l|lens=", "{NAME} of the lens to use. Default subset is used if not specified.",
                  l => {
                      var lens = LensesCollection.GetLensByName(l);
                      if (lens != null)
                      {
                          analyzers.Add(lens);
                      }
                      else
                      {
                          Console.WriteLine($"Error: Lens name '{l}' does not exist.");
                          error = true;
                      }
                  } },

                { "d|dir=", "Additional location {PATH} to look for assembly references.",
                  l => {
                      if (!Directory.Exists(l))
                      {
                          Console.WriteLine($"Error: Directory '{l}' does not exist.");
                          error = true;
                      }
                      else
                      {
                          dirs.Add(Path.GetFullPath(l));
                      }
                  } },

                { "all-lenses", "Uses all lenses available.",
                  l => analyzers.AddRange(LensesCollection.AllAnalyzers) },
                { "h|help", "Show this message and exit.",
                  v => showUsage = v != null },
                { "limit=", "Maximum number of findings reported by lens (defaults to 30).",
                  l => runner.MaxAnalyzerResults = int.Parse(l) },
            };

            List <string> files;

            try {
                files = options.Parse(args);
            } catch (OptionException e) {
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `tlens --help' for more information.");
                return(1);
            }

            if (showUsage)
            {
                ShowUsage(options);
                return(0);
            }

            if (files.Count == 0)
            {
                Console.WriteLine("Error: No input files were specified.");
                return(1);
            }

            if (error)
            {
                return(1);
            }

            foreach (var f in files)
            {
                var d = Path.GetDirectoryName(Path.GetFullPath(f));
                if (dirs.Contains(d))
                {
                    continue;
                }

                dirs.Add(d);
            }

            var resolver   = new AssemlyReferenceResolver(dirs.ToArray());
            var assemblies = LoadFiles(files, resolver);

            // Set default set of lenses if none was used
            if (analyzers.Count == 0)
            {
                runner.AddAnalyzers(LensesCollection.DefaultAnalyzers);
            }
            else
            {
                runner.AddAnalyzers(analyzers);
            }

            runner.Process(assemblies);

            return(0);
        }