internal AssemblyName GetAssemblyName(StringHandle nameHandle, Version version, StringHandle cultureHandle, BlobHandle publicKeyOrTokenHandle, AssemblyHashAlgorithm assemblyHashAlgorithm, AssemblyFlags flags) { string name = GetString(nameHandle); // compat: normalize 'null' culture name to "" to match AssemblyName.GetAssemblyName() string cultureName = (!cultureHandle.IsNil) ? GetString(cultureHandle) : ""; var hashAlgorithm = (Configuration.Assemblies.AssemblyHashAlgorithm)assemblyHashAlgorithm; byte[]? publicKeyOrToken = !publicKeyOrTokenHandle.IsNil ? GetBlobBytes(publicKeyOrTokenHandle) : null; var assemblyName = new AssemblyName(name) { Version = version, CultureName = cultureName, #pragma warning disable SYSLIB0037 // AssemblyName.HashAlgorithm is obsolete HashAlgorithm = hashAlgorithm, #pragma warning restore Flags = GetAssemblyNameFlags(flags), ContentType = GetContentTypeFromAssemblyFlags(flags) }; bool hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0; if (hasPublicKey) { assemblyName.SetPublicKey(publicKeyOrToken); } else { assemblyName.SetPublicKeyToken(publicKeyOrToken); } return(assemblyName); }
/// <summary> /// Reads a #Blob heap handle encoded as a compressed integer. /// </summary> /// <remarks> /// Blobs that contain references to other blobs are used in Portable PDB format, for example <see cref="Document.Name"/>. /// </remarks> public BlobHandle ReadBlobHandle() { return(BlobHandle.FromOffset(ReadCompressedInteger())); }
internal AssemblyName GetAssemblyName(StringHandle nameHandle, Version version, StringHandle cultureHandle, BlobHandle publicKeyOrTokenHandle, AssemblyHashAlgorithm assemblyHashAlgorithm, AssemblyFlags flags) { string name = GetString(nameHandle); // compat: normalize Nil culture name to "" to match original behavior of AssemblyName.GetAssemblyName() string cultureName = (!cultureHandle.IsNil) ? GetString(cultureHandle) : ""; var hashAlgorithm = (Configuration.Assemblies.AssemblyHashAlgorithm)assemblyHashAlgorithm; // compat: original native implementation used to guarantee that publicKeyOrToken is never null in this scenario. byte[]? publicKeyOrToken = !publicKeyOrTokenHandle.IsNil ? GetBlobBytes(publicKeyOrTokenHandle) : Array.Empty <byte>(); var assemblyName = new AssemblyName() { Name = name, Version = version, CultureName = cultureName, #pragma warning disable SYSLIB0037 // AssemblyName.HashAlgorithm is obsolete HashAlgorithm = hashAlgorithm, #pragma warning restore Flags = GetAssemblyNameFlags(flags), ContentType = GetContentTypeFromAssemblyFlags(flags) }; bool hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0; if (hasPublicKey) { assemblyName.SetPublicKey(publicKeyOrToken); } else { assemblyName.SetPublicKeyToken(publicKeyOrToken); } return(assemblyName); }