Пример #1
0
        static IEnumerable <string> GetAssemblies(GacDirInfo gacInfo, PublicKeyToken pkt, IAssembly assembly)
        {
            string pktString     = pkt.ToString();
            string verString     = assembly.Version.ToString();
            var    cultureString = UTF8String.ToSystemStringOrEmpty(assembly.Culture);

            if (cultureString.Equals("neutral", StringComparison.OrdinalIgnoreCase))
            {
                cultureString = string.Empty;
            }
            var asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name);

            foreach (var subDir in gacInfo.SubDirs)
            {
                var    baseDir = Path.Combine(gacInfo.Path, subDir);
                string pathName;
                try {
                    baseDir  = Path.Combine(baseDir, asmSimpleName);
                    baseDir  = Path.Combine(baseDir, $"{gacInfo.Prefix}{verString}_{cultureString}_{pktString}");
                    pathName = Path.Combine(baseDir, asmSimpleName + ".dll");
                }
                catch (ArgumentException) {
                    // Invalid char(s) in asmSimpleName, cultureString
                    yield break;
                }
                if (File.Exists(pathName))
                {
                    yield return(pathName);
                }
            }
        }
Пример #2
0
        static IEnumerable <string> GetAssemblies(GacDirInfo gacInfo, PublicKeyToken pkt, IAssembly assembly)
        {
            string pktString     = pkt.ToString();
            string verString     = assembly.Version.ToString();
            var    cultureString = UTF8String.ToSystemStringOrEmpty(assembly.Culture);

            if (cultureString.Equals("neutral", StringComparison.OrdinalIgnoreCase))
            {
                cultureString = string.Empty;
            }
            var asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name);

            foreach (var subDir in gacInfo.SubDirs)
            {
                var baseDir = Path.Combine(gacInfo.Path, subDir);
                baseDir = Path.Combine(baseDir, asmSimpleName);
                baseDir = Path.Combine(baseDir, string.Format("{0}{1}_{2}_{3}", gacInfo.Prefix, verString, cultureString, pktString));
                var pathName = Path.Combine(baseDir, asmSimpleName + ".dll");
                if (File.Exists(pathName))
                {
                    yield return(pathName);
                }
            }
        }
Пример #3
0
 static IEnumerable <GacFileInfo> GetAssemblies(GacDirInfo gacInfo)
 {
     foreach (var subDir in gacInfo.SubDirs)
     {
         var baseDir = Path.Combine(gacInfo.Path, subDir);
         foreach (var dir in GetDirectories(baseDir))
         {
             foreach (var dir2 in GetDirectories(dir))
             {
                 Version        version;
                 string         culture;
                 PublicKeyToken pkt;
                 if (gacInfo.Version == 2)
                 {
                     var m = gac2Regex.Match(Path.GetFileName(dir2));
                     if (!m.Success || m.Groups.Count != 4)
                     {
                         continue;
                     }
                     if (!Version.TryParse(m.Groups[1].Value, out version))
                     {
                         continue;
                     }
                     culture = m.Groups[2].Value;
                     pkt     = new PublicKeyToken(m.Groups[3].Value);
                     if (PublicKeyBase.IsNullOrEmpty2(pkt))
                     {
                         continue;
                     }
                 }
                 else if (gacInfo.Version == 4)
                 {
                     var m = gac4Regex.Match(Path.GetFileName(dir2));
                     if (!m.Success || m.Groups.Count != 4)
                     {
                         continue;
                     }
                     if (!Version.TryParse(m.Groups[1].Value, out version))
                     {
                         continue;
                     }
                     culture = m.Groups[2].Value;
                     pkt     = new PublicKeyToken(m.Groups[3].Value);
                     if (PublicKeyBase.IsNullOrEmpty2(pkt))
                     {
                         continue;
                     }
                 }
                 else
                 {
                     throw new InvalidOperationException();
                 }
                 var asmName = Path.GetFileName(dir);
                 var file    = Path.Combine(dir2, asmName) + ".dll";
                 if (!File.Exists(file))
                 {
                     file = Path.Combine(dir2, asmName) + ".exe";
                     if (!File.Exists(file))
                     {
                         continue;
                     }
                 }
                 var asmInfo = new AssemblyNameInfo {
                     Name             = asmName,
                     Version          = version,
                     Culture          = culture,
                     PublicKeyOrToken = pkt,
                 };
                 yield return(new GacFileInfo(asmInfo, file));
             }
         }
     }
 }
Пример #4
0
 static IEnumerable<GacFileInfo> GetAssemblies(GacDirInfo gacInfo)
 {
     foreach (var subDir in gacInfo.SubDirs) {
         var baseDir = Path.Combine(gacInfo.Path, subDir);
         foreach (var dir in GetDirectories(baseDir)) {
             foreach (var dir2 in GetDirectories(dir)) {
                 Version version;
                 string culture;
                 PublicKeyToken pkt;
                 if (gacInfo.Version == 2) {
                     var m = gac2Regex.Match(Path.GetFileName(dir2));
                     if (!m.Success || m.Groups.Count != 4)
                         continue;
                     if (!Version.TryParse(m.Groups[1].Value, out version))
                         continue;
                     culture = m.Groups[2].Value;
                     pkt = new PublicKeyToken(m.Groups[3].Value);
                     if (PublicKeyBase.IsNullOrEmpty2(pkt))
                         continue;
                 }
                 else if (gacInfo.Version == 4) {
                     var m = gac4Regex.Match(Path.GetFileName(dir2));
                     if (!m.Success || m.Groups.Count != 4)
                         continue;
                     if (!Version.TryParse(m.Groups[1].Value, out version))
                         continue;
                     culture = m.Groups[2].Value;
                     pkt = new PublicKeyToken(m.Groups[3].Value);
                     if (PublicKeyBase.IsNullOrEmpty2(pkt))
                         continue;
                 }
                 else
                     throw new InvalidOperationException();
                 var asmName = Path.GetFileName(dir);
                 var file = Path.Combine(dir2, asmName) + ".dll";
                 if (!File.Exists(file)) {
                     file = Path.Combine(dir2, asmName) + ".exe";
                     if (!File.Exists(file))
                         continue;
                 }
                 var asmInfo = new AssemblyNameInfo {
                     Name = asmName,
                     Version = version,
                     Culture = culture,
                     PublicKeyOrToken = pkt,
                 };
                 yield return new GacFileInfo(asmInfo, file);
             }
         }
     }
 }
Пример #5
0
 static IEnumerable<string> GetAssemblies(GacDirInfo gacInfo, PublicKeyToken pkt, IAssembly assembly)
 {
     string pktString = pkt.ToString();
     string verString = assembly.Version.ToString();
     var cultureString = UTF8String.ToSystemStringOrEmpty(assembly.Culture);
     if (cultureString.Equals("neutral", StringComparison.OrdinalIgnoreCase))
         cultureString = string.Empty;
     var asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name);
     foreach (var subDir in gacInfo.SubDirs) {
         var baseDir = Path.Combine(gacInfo.Path, subDir);
         baseDir = Path.Combine(baseDir, asmSimpleName);
         baseDir = Path.Combine(baseDir, string.Format("{0}{1}_{2}_{3}", gacInfo.Prefix, verString, cultureString, pktString));
         var pathName = Path.Combine(baseDir, asmSimpleName + ".dll");
         if (File.Exists(pathName))
             yield return pathName;
     }
 }