/// <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));
        }
Пример #2
0
 /// <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));
     }
 }
Пример #3
0
        /// <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));
            }
        }