/// <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()); }
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); }
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); }
private void FindReferencesOf(IAssembly assembly) { foreach (AssemblyName referenceName in assembly.GetReferencedAssemblies()) { Analyse(assembly.GetName(), referenceName); } }