/// <summary>
        ///     Gets all referenced assemblies.
        /// </summary>
        /// <param name="assembly">The assembly.</param>
        /// <param name="pattern">The pattern.</param>
        /// <param name="excludePattern">The exclude pattern.</param>
        /// <param name="marked">The marked.</param>
        /// <param name="assemblies">The assemblies.</param>
        /// <returns></returns>
        // ReSharper disable once ExcessiveIndentation
        private static IAssembly[] GetAllReferencedAssemblies(IAssembly assembly, string pattern, string excludePattern,
                                                              HashSet <string> marked, Dictionary <string, IAssembly> assemblies)
        {
            var name = assembly.GetName().Name;

            marked.Add(name);
            if (!assembly.IsFrameworkAssembly())
            {
                if (CheckPattern(assembly, pattern, excludePattern))
                {
                    if (!assemblies.ContainsKey(name))
                    {
                        assemblies.Add(name, assembly);
                    }
                }
                foreach (var assemblyName in assembly.GetReferencedAssemblies())
                {
                    if (assemblyName.FullName.Contains(pattern))
                    {
                        if (!assemblyName.FullName.Contains("Unit"))
                        {
                            if (!marked.Contains(assemblyName.Name))
                            {
                                var referenced = Assembly.Load(assemblyName).Adapt();
                                GetAllReferencedAssemblies(referenced, pattern, excludePattern, marked, assemblies);
                            }
                        }
                    }
                }
            }
            return(assemblies.Values.ToArray());
        }
示例#2
0
        public IAssemblyInfo LoadAssembly(IAssembly assembly)
        {
            if (assembly == null)
            {
                return(null);
            }
            if (!_assemblies.TryGetValue(assembly.FullName, out var result))
            {
                result = new MarkUnitAssembly(assembly);
                _assemblies.Add(assembly.FullName, result);
                result.ReferencedAssemblies = assembly.GetReferencedAssemblies().Select(LoadAssembly).Where(a => a != null).ToArray();
            }

            return(result);
        }
示例#3
0
        public List <Dependency> AnalyseAssembly(IAssembly currentAssembly, string outputPath)
        {
            var assemblyName = currentAssembly.GetName();

            if (!IsAlreadyAnalysed(assemblyName))
            {
                foreach (AssemblyName referencedName in currentAssembly.GetReferencedAssemblies())
                {
                    var assemblyInLib = _assemblyLoader.LoadAssembly(Path.Combine(outputPath, referencedName.Name + ".dll"));
                    if (assemblyInLib != null)
                    {
                        AssemblyName assemblyInLibName = assemblyInLib.GetName();
                        AddToDependencyList(assemblyName, referencedName, assemblyInLibName);
                        AnalyseAssembly(assemblyInLib, outputPath);
                    }
                }
            }
            return(_dependencies);
        }
示例#4
0
 private void FindReferencesOf(IAssembly assembly)
 {
     foreach (AssemblyName referenceName in assembly.GetReferencedAssemblies()) {
         Analyse(assembly.GetName(), referenceName);
     }
 }