예제 #1
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="name">Assembly name</param>
 public DmdReadOnlyAssemblyName(IDmdAssemblyName name)
 {
     if (name == null)
     {
         throw new ArgumentNullException(nameof(name));
     }
     Name           = name.Name;
     Version        = name.Version;
     CultureName    = name.CultureName;
     RawFlags       = name.RawFlags;
     publicKey      = DmdAssemblyName.CloneArray(name.GetPublicKey());
     publicKeyToken = DmdAssemblyName.CloneArray(name.GetPublicKeyToken());
     HashAlgorithm  = name.HashAlgorithm;
 }
예제 #2
0
        /// <summary>
        /// Compares two assembly names
        /// </summary>
        /// <param name="a">First assembly name</param>
        /// <param name="b">Second assembly name</param>
        /// <returns></returns>
        public bool Equals(IDmdAssemblyName a, IDmdAssemblyName b)
        {
            if ((object)a == b)
            {
                return(true);
            }
            if ((object)a == null || (object)b == null)
            {
                return(false);
            }

            // We do not compare the version number. The runtime can redirect an assembly
            // reference from a requested version to any other version.
            const DmdAssemblyNameFlags flagsMask = DmdAssemblyNameFlags.ContentType_Mask;

            return((a.RawFlags & flagsMask) == (b.RawFlags & flagsMask) &&
                   StringComparer.OrdinalIgnoreCase.Equals(a.Name, b.Name) &&
                   StringComparer.OrdinalIgnoreCase.Equals(a.CultureName ?? string.Empty, b.CultureName ?? string.Empty) &&
                   Impl.AssemblyNameEqualityComparer.PublicKeyTokenEquals(a.GetPublicKeyToken(), b.GetPublicKeyToken()));
        }
예제 #3
0
 public static void FormatFullNameTo(this IDmdAssemblyName self, StringBuilder sb) =>
 DmdAssemblyNameFormatter.Format(sb, self.Name, self.Version, self.CultureName, self.GetPublicKeyToken(), self.RawFlags, isPublicKeyToken: true);