private static ImmutableArray <AssemblyIdentity> ReadReferences( SystemMetadataReader metadataReader ) { var builder = ImmutableArray.CreateBuilder <AssemblyIdentity>(); foreach (var referenceHandle in metadataReader.AssemblyReferences) { var reference = metadataReader.GetAssemblyReference(referenceHandle); var refname = metadataReader.GetString(reference.Name); var refversion = reference.Version; var refcultureName = metadataReader.GetString(reference.Culture); var refpublicKeyOrToken = metadataReader.GetBlobContent(reference.PublicKeyOrToken); var refflags = reference.Flags; var refhasPublicKey = (refflags & AssemblyFlags.PublicKey) != 0; builder.Add( new AssemblyIdentity( refname, refversion, refcultureName, refpublicKeyOrToken, hasPublicKey: refhasPublicKey ) ); } return(builder.ToImmutable()); }
private static AssemblyIdentity ReadAssemblyIdentity(SystemMetadataReader metadataReader) { var assemblyDefinition = metadataReader.GetAssemblyDefinition(); var name = metadataReader.GetString(assemblyDefinition.Name); var version = assemblyDefinition.Version; var cultureName = metadataReader.GetString(assemblyDefinition.Culture); var publicKeyOrToken = metadataReader.GetBlobContent(assemblyDefinition.PublicKey); var flags = assemblyDefinition.Flags; var hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0; return(new AssemblyIdentity(name, version, cultureName, publicKeyOrToken, hasPublicKey: hasPublicKey)); }
private static AssemblyIdentity ReadAssemblyIdentity(SystemMetadataReader metadataReader) { var assemblyDefinition = metadataReader.GetAssemblyDefinition(); string name = metadataReader.GetString(assemblyDefinition.Name); Version version = assemblyDefinition.Version; string cultureName = metadataReader.GetString(assemblyDefinition.Culture); ImmutableArray <byte> publicKeyOrToken = metadataReader.GetBlobContent(assemblyDefinition.PublicKey); AssemblyFlags flags = assemblyDefinition.Flags; bool hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0; return(new AssemblyIdentity(name, version, cultureName, publicKeyOrToken, hasPublicKey: hasPublicKey)); }
private static RuntimeAssemblyName CreateRuntimeAssemblyNameFromMetadata( MetadataReader reader, StringHandle name, Version version, StringHandle culture, BlobHandle publicKeyOrToken, AssemblyFlags assemblyFlags) { AssemblyNameFlags assemblyNameFlags = AssemblyNameFlags.None; if (0 != (assemblyFlags & AssemblyFlags.PublicKey)) assemblyNameFlags |= AssemblyNameFlags.PublicKey; if (0 != (assemblyFlags & AssemblyFlags.Retargetable)) assemblyNameFlags |= AssemblyNameFlags.Retargetable; int contentType = ((int)assemblyFlags) & 0x00000E00; assemblyNameFlags |= (AssemblyNameFlags)contentType; return new RuntimeAssemblyName( name.GetString(reader), version, culture.GetString(reader), assemblyNameFlags, reader.GetBlobContent(publicKeyOrToken).ToArray() ); }
private static AssemblyIdentity ReadAssemblyIdentity(SystemMetadataReader metadataReader) { var assemblyDefinition = metadataReader.GetAssemblyDefinition(); string name = metadataReader.GetString(assemblyDefinition.Name); Version version = assemblyDefinition.Version; string cultureName = metadataReader.GetString(assemblyDefinition.Culture); ImmutableArray<byte> publicKeyOrToken = metadataReader.GetBlobContent(assemblyDefinition.PublicKey); AssemblyFlags flags = assemblyDefinition.Flags; bool hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0; return new AssemblyIdentity(name, version, cultureName, publicKeyOrToken, hasPublicKey: hasPublicKey); }
private static ImmutableArray<AssemblyIdentity> ReadReferences(SystemMetadataReader metadataReader) { var builder = ImmutableArray.CreateBuilder<AssemblyIdentity>(); foreach (var referenceHandle in metadataReader.AssemblyReferences) { var reference = metadataReader.GetAssemblyReference(referenceHandle); string refname = metadataReader.GetString(reference.Name); Version refversion = reference.Version; string refcultureName = metadataReader.GetString(reference.Culture); ImmutableArray<byte> refpublicKeyOrToken = metadataReader.GetBlobContent(reference.PublicKeyOrToken); AssemblyFlags refflags = reference.Flags; bool refhasPublicKey = (refflags & AssemblyFlags.PublicKey) != 0; builder.Add(new AssemblyIdentity(refname, refversion, refcultureName, refpublicKeyOrToken, hasPublicKey: refhasPublicKey)); } return builder.ToImmutable(); }
private void CheckAssemblyProperties(MetadataReader referenceMetadata, MetadataReader newMetadata) { AssemblyDefinition referenceAssemblyDefinition = referenceMetadata.GetAssemblyDefinition(); AssemblyDefinition newAssemblyDefinition = newMetadata.GetAssemblyDefinition(); string referenceName = referenceMetadata.GetString(referenceAssemblyDefinition.Name); string newName = newMetadata.GetString(newAssemblyDefinition.Name); if (!string.Equals(referenceName, newName, StringComparison.Ordinal)) _logger.Report(AssemblyNameMustNotBeChanged.CreateMessage()); string referenceCulture = referenceMetadata.GetString(referenceAssemblyDefinition.Culture); string newCulture = referenceMetadata.GetString(newAssemblyDefinition.Culture); if (!string.Equals(referenceCulture, newCulture, StringComparison.Ordinal)) throw new NotImplementedException("Assembly culture changed."); if (!referenceAssemblyDefinition.PublicKey.IsNil) { // adding a public key is supported, but removing or changing it is not. var referencePublicKey = referenceMetadata.GetBlobContent(referenceAssemblyDefinition.PublicKey); var newPublicKey = newMetadata.GetBlobContent(newAssemblyDefinition.PublicKey); if (!referencePublicKey.SequenceEqual(newPublicKey)) _logger.Report(PublicKeyMustNotBeChanged.CreateMessage()); } }