/// <summary> /// Computes the AssemblyIdentifier of the PE File. This requires that peFile is an assembly. /// </summary> /// <param name="peFileReader"></param> /// <returns></returns> internal AssemblyIdentity GetAssemblyIdentifier(PEFileReader peFileReader) //^ requires peFileReader.ReaderState >= ReaderState.Metadata && peFileReader.IsAssembly; //^ ensures (result.Location != null && result.Location.Length != 0); { AssemblyRow assemblyRow = peFileReader.AssemblyTable[1]; IName assemblyName = this.metadataReaderHost.NameTable.GetNameFor(peFileReader.StringStream[assemblyRow.Name]); string cultureName = peFileReader.StringStream[assemblyRow.Culture]; Version version = new Version(assemblyRow.MajorVersion, assemblyRow.MinorVersion, assemblyRow.BuildNumber, assemblyRow.RevisionNumber); byte[] publicKeyArray = TypeCache.EmptyByteArray; byte[] publicKeyTokenArray = TypeCache.EmptyByteArray; if (assemblyRow.PublicKey != 0) { publicKeyArray = peFileReader.BlobStream[assemblyRow.PublicKey]; if (publicKeyArray.Length > 0) { publicKeyTokenArray = UnitHelper.ComputePublicKeyToken(publicKeyArray); } } return(new AssemblyIdentity(assemblyName, cultureName, version, publicKeyTokenArray, peFileReader.BinaryDocumentMemoryBlock.BinaryDocument.Location)); }
/// <summary> /// Allocates an object that identifies a .NET assembly, using the IAssembly object /// </summary> /// <param name="assembly"></param> public static AssemblyIdentity GetAssemblyIdentity( IAssembly assembly ) { byte[] pKey = new List <byte>(assembly.PublicKey).ToArray(); if (pKey.Length != 0) { return(new AssemblyIdentity(assembly.Name, assembly.Culture, assembly.Version, UnitHelper.ComputePublicKeyToken(pKey), assembly.Location)); } else { return(new AssemblyIdentity(assembly.Name, assembly.Culture, assembly.Version, new byte[0], assembly.Location)); } }
/// <summary> /// Allocates an object that identifies a .NET assembly, using the IAssembly object /// </summary> /// <param name="assembly"></param> public static AssemblyIdentity GetAssemblyIdentity(IAssembly assembly) { Contract.Requires(assembly != null); Contract.Ensures(Contract.Result <AssemblyIdentity>() != null); byte[] pKey = new List <byte>(assembly.PublicKey).ToArray(); if (pKey.Length != 0) { return(new AssemblyIdentity(assembly.Name, assembly.Culture, assembly.Version, UnitHelper.ComputePublicKeyToken(pKey), assembly.Location)); } else { return(new AssemblyIdentity(assembly.Name, assembly.Culture, assembly.Version, new byte[0], assembly.Location)); } }