void FetchGacContents() { IGlobalAssemblyCacheService gacService = SD.GetService <IGlobalAssemblyCacheService>(); HashSet <string> fullNames = new HashSet <string>(); UpdateProgressBar(pg => { pg.Visibility = System.Windows.Visibility.Visible; pg.IsIndeterminate = true; }); var list = gacService.Assemblies.TakeWhile(_ => !cancelFetchThread).ToList(); UpdateProgressBar(pg => { pg.IsIndeterminate = false; pg.Maximum = list.Count; }); foreach (var r in list) { if (cancelFetchThread) { break; } if (fullNames.Add(r.FullName)) // filter duplicates { var file = gacService.FindAssemblyInNetGac(r); if (file != null) { var entry = new GacEntry(r, file); UpdateProgressBar(pg => { pg.Value = pg.Value + 1; AddNewEntry(entry); }); } } } UpdateProgressBar(pg => { pg.Visibility = System.Windows.Visibility.Hidden; }); }
string ResolveAssemblyFromGac(string assemblyReference) { var assemblyName = new DomAssemblyName(assemblyReference); DomAssemblyName foundAssemblyName = gac.FindBestMatchingAssemblyName(assemblyName); if (foundAssemblyName != null) { FileName fileName = gac.FindAssemblyInNetGac(foundAssemblyName); if (fileName != null) { return(fileName.ToString()); } } return(null); }