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);
        }