public static List <DotnetLibrary> GetGACLibraries() { var gacList = new List <DotnetLibrary>(); try { var assemblyEnumerator = new AssemblyCacheEnumerator(); var assemblyName = assemblyEnumerator.GetNextAssembly(); while (assemblyName != null) { var assemblyDescription = new AssemblyDescription(assemblyName); string name = assemblyDescription.Name; bool probablyMicrosoftPackage = (name.StartsWith("Microsoft", StringComparison.Ordinal) || name.StartsWith("System", StringComparison.Ordinal)); if (!probablyMicrosoftPackage) { var gacLib = new DotnetLibrary { Culture = assemblyDescription.Culture, ProcessorArchitecture = assemblyDescription.ProcessorArchitecture, Name = name, Version = assemblyDescription.Version, Filepath = assemblyDescription.Path, }; FileInfo fi = new FileInfo(gacLib.Filepath); if (fi.Exists) { gacLib.Filename = fi.Name; FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(gacLib.Filepath); bool isDllFile = fvi.FileVersion != null; bool isMicrosoftCopyright = fvi.LegalCopyright != null && fvi.LegalCopyright.Contains("Microsoft Corporation"); if (isDllFile && !isMicrosoftCopyright) { gacLib.FileDescription = fvi.FileDescription; gacLib.Version = fvi.FileVersion; gacLib.ProductName = fvi.ProductName; gacLib.ProductVersion = fvi.ProductVersion; gacLib.Copyright = fvi.LegalCopyright; gacLib.Language = fvi.Language; gacLib.SHA1Hash = GetFileSHA1(gacLib.Filepath); gacLib.Md5Hash = GetFileMD5(gacLib.Filepath); try { gacLib.Issue = LibraryIssueChecker.GetIssue(gacLib); } catch { gacLib.Issue = null; } gacList.Add(gacLib); } } } assemblyName = assemblyEnumerator.GetNextAssembly(); } } catch (Exception ex) { Trace.TraceWarning("Could not load DLL list from the GAC. Error: {0}", ex.ToString()); Console.Error.WriteLine("Could not load DLL list from the GAC."); return(new List <DotnetLibrary>()); } return(gacList); }
private static List <DotnetLibrary> GetLibsForApp(string appPath) { var libs = new List <DotnetLibrary>(); DirectoryInfo di = new DirectoryInfo(Path.Combine(appPath, "bin")); if (di.Exists) { foreach (FileInfo fi in di.GetFiles("*.dll")) { if (!fi.Exists) { continue; } var lib = new DotnetLibrary(); lib.Filepath = fi.FullName; lib.Filename = fi.Name; FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(lib.Filepath); bool isDllFile = fvi.FileVersion != null; if (!isDllFile) { continue; } lib.FileDescription = fvi.FileDescription; lib.Version = fvi.FileVersion; lib.ProductName = fvi.ProductName; lib.ProductVersion = fvi.ProductVersion; lib.Copyright = fvi.LegalCopyright; lib.Language = fvi.Language; lib.SHA1Hash = GetFileSHA1(lib.Filepath); lib.Md5Hash = GetFileMD5(lib.Filepath); //get .net metadata try { var assemblyName = AssemblyName.GetAssemblyName(lib.Filepath); lib.Name = assemblyName.Name; lib.Culture = assemblyName.CultureInfo.Name; lib.Version = assemblyName.Version.ToString(); lib.ProcessorArchitecture = Enum.GetName(typeof(ProcessorArchitecture), assemblyName.ProcessorArchitecture); var bytes = assemblyName.GetPublicKeyToken(); if (bytes == null || bytes.Length == 0) { lib.PublicKeyToken = "None"; } else { string publicKeyToken = string.Empty; for (int i = 0; i < bytes.GetLength(0); i++) { publicKeyToken += string.Format("{0:x2}", bytes[i]); } lib.PublicKeyToken = publicKeyToken; } lib.AssemblyVersion = assemblyName.Version; } catch (Exception ex) when(ex is BadImageFormatException || ex is FileNotFoundException || ex is NotSupportedException || ex is FileLoadException) { Trace.TraceWarning("Could not load assembly at {0}. Error: {1}", lib.Filepath, ex.ToString()); Console.Error.WriteLine("Could not load assembly info for {0}", lib.Filepath); continue; } lib.Issue = LibraryIssueChecker.GetIssue(lib); libs.Add(lib); } } return(libs); }