/// <summary> /// Gets the Mono Gac directory based on the assembly name. /// </summary> /// <remarks> /// If the assembly name is not fully qualified then this method returns /// null. /// </remarks> public static MonoGacDirectory GetAssemblyDirectory(string gacBaseDirectory, MonoAssemblyName assemblyName) { if (assemblyName.IsFullyQualified) { return new MonoGacDirectory(gacBaseDirectory, assemblyName); } return null; }
/// <summary> /// Determines whether the assembly names match. /// </summary> /// <returns> /// Handles partially qualified assembly names and will return /// <see langword="true"/> if the match is a partial match. /// </returns> public bool IsMatch(MonoAssemblyName assemblyName) { if (name == assemblyName.Name) { if (assemblyName.publicKeyToken != null && publicKeyToken != null) { if (assemblyName.publicKeyToken.Length == publicKeyToken.Length) { for (int i = 0; i < publicKeyToken.Length; ++i) { if (publicKeyToken[i] != assemblyName.publicKeyToken[i]) { return false; } } } } if (assemblyName.version != null && version != null) { if (assemblyName.version != version) { return false; } } if (assemblyName.cultureInfo != null && cultureInfo != null) { if (assemblyName.cultureInfo == cultureInfo) { return false; } } return true; } return false; }
public MonoGacDirectory(string gacBaseDirectory, MonoAssemblyName assemblyName) { this.gacBaseDirectory = gacBaseDirectory; this.assemblyName = assemblyName; }
public MonoGacDirectory(string gacBaseDirectory, string assemblyDirectoryName, string versionDirectoryName) { string assemblyDirectory = Path.Combine(gacBaseDirectory, Path.Combine(assemblyDirectoryName, versionDirectoryName)); assemblyName = new MonoAssemblyName(GetAssemblyName(assemblyDirectoryName, versionDirectoryName), assemblyDirectory); }
/// <summary> /// Tries to match the partially specified assembly name. /// </summary> static MonoAssemblyName FindPartialAssemblyName(MonoAssemblyName partialName) { string assemblyDirectoryName = Path.Combine(MonoToolLocationHelper.GetPathToMonoGac(), partialName.Name); if (Directory.Exists(assemblyDirectoryName)) { MonoAssemblyName matchedName = null; DirectoryInfo assemblyNameDirectoryInfo = new DirectoryInfo(assemblyDirectoryName); foreach (DirectoryInfo versionDirectoryInfo in assemblyNameDirectoryInfo.GetDirectories()) { string assemblyFullName = MonoGacDirectory.GetAssemblyName(assemblyNameDirectoryInfo.Name, versionDirectoryInfo.Name); MonoAssemblyName name = CreateMonoAssemblyName(assemblyFullName, versionDirectoryInfo.FullName); if (name != null && name.IsFullyQualified) { if (matchedName == null) { if (partialName.IsMatch(name)) { matchedName = name; } } else if (partialName.IsMatch(name) && name.Version > matchedName.Version) { matchedName = name; } } } return matchedName; } return null; }