示例#1
0
 IEnumerable <Base.ISearchItem> Prepare(AssemblyPublic assemblyPublic, HashSet <string> namespaces)
 {
     foreach (var c in publicApiStorage.LoadClasses(assemblyPublic.Id))
     {
         namespaces.Add(c.Namespace);
         yield return(new Processing.SearchItem(assemblyPublic, splitStringStore.Store(c.FullName), c.IsPublic));
     }
 }
示例#2
0
        public IEnumerable <(AssemblyPublic, Class[])> Extract(string filePath)
        {
            var readerParameters = new ReaderParameters();
            var resolver         = new DefaultAssemblyResolver();

            var assLocation = typeof(CecilProcessor).GetTypeInfo().Assembly.Location;
            var assDir      = Path.GetDirectoryName(assLocation);

            var targetDirFolder = Path.GetDirectoryName(filePath);

            resolver.AddSearchDirectory(targetDirFolder);
            resolver.AddSearchDirectory(assDir);


            foreach (var resolvePath in Environment.GetCommandLineArgs().Where(w => w.ToLower().StartsWith("-cecilrefpath:")))
            {
                resolver.AddSearchDirectory(resolvePath.Substring("-cecilRefPath:".Length));
            }

            readerParameters.AssemblyResolver = resolver;

            if (new FileInfo(filePath).Exists == false)
            {
                if (new FileInfo(Path.Combine(assDir, filePath)).Exists)
                {
                    filePath = Path.Combine(assDir, filePath);
                }
            }

            var assDef = AssemblyDefinition.ReadAssembly(filePath, readerParameters);
            var res    = new AssemblyPublic()
            {
                FullName = assDef.FullName
            };

            var classes = assDef.Modules.SelectMany(module => extractors.SelectMany(e => e.ExtractClasses(module)))
                          .ToArray();

            yield return(res, classes);
        }
示例#3
0
 public SearchItem(AssemblyPublic assemblyPublic, SplitStringStore.Item fullClassName, bool isPublic)
 {
     this.Assembly      = assemblyPublic;
     this.fullClassName = fullClassName;
     this.IsPublic      = isPublic;
 }