private static Assembly LoadAssembly(string baseDir, ReferencedAssemblyInfo info) { Assembly assembly = null; try { assembly = Assembly.Load(info.FullName); } catch { try { assembly = Assembly.LoadFrom(Path.Combine(baseDir, info.Name + ".dll")); } catch { try { assembly = Assembly.LoadFrom(Path.Combine(baseDir, info.Name + ".exe")); } catch { } } } return(assembly); }
private static void FindReferencedAssemblies(string programPath, Dictionary <string, ReferencedAssemblyInfo> assemblies) { string baseDir = Path.GetDirectoryName(programPath); int order = 0; Queue <ReferencedAssemblyInfo> queue = new Queue <ReferencedAssemblyInfo>(); Assembly assembly = Assembly.LoadFrom(programPath); queue.Enqueue(new ReferencedAssemblyInfo() { Name = assembly.GetName().Name, FullName = assembly.FullName, Level = 0 }); while (queue.Count > 0) { ReferencedAssemblyInfo info = queue.Dequeue(); if (!assemblies.ContainsKey(info.FullName)) { assembly = LoadAssembly(baseDir, info); if (assembly != null) { info.Order = order++; info.Path = assembly.Location; assemblies.Add(info.FullName, info); foreach (var reference in assembly.GetReferencedAssemblies()) { queue.Enqueue(new ReferencedAssemblyInfo() { ReferencedByFullName = info.FullName, Name = reference.Name, FullName = reference.FullName, Level = info.Level + 1, }); } } } } }