static bool IsAssemblyRef(AssemblyRef asmRef, UTF8String name, PublicKeyToken token) { if (asmRef.Name != name) return false; var pkot = asmRef.PublicKeyOrToken; if (pkot == null) return false; return token.Equals(pkot.Token); }
public FrameworkRedirectInfo(string publicKeyToken, string redirectVersion) { this.publicKeyToken = new PublicKeyToken(publicKeyToken); this.redirectVersion = new Version(redirectVersion); }
static string GetAssemblyFile(IAssembly reference, string prefix, string gac) { var gac_folder = new StringBuilder() .Append(prefix) .Append(reference.Version) .Append("__"); var pkt = PublicKeyBase.ToPublicKeyToken(reference.PublicKeyOrToken); if (PublicKeyBase.IsNullOrEmpty2(pkt)) pkt = new PublicKeyToken(new byte[8]); for (int i = 0; i < pkt.Data.Length; i++) gac_folder.Append(pkt.Data[i].ToString("x2")); try { return Path.Combine( Path.Combine( Path.Combine(gac, reference.Name), gac_folder.ToString()), reference.Name + ".dll"); } catch (ArgumentException) { } return null; }
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); } } } }
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; } }