public static AssemblyNameVersion[] GetAssemblyReferenceNameVersion(AssemblyMetadataHelper.IMetaDataAssemblyImport assemblyImport)
        {
            IntPtr intPtr;
            IntPtr intPtr1;
            int    num;
            int    num1;
            int    num2;
            int    num3;

            if (assemblyImport == null)
            {
                return(null);
            }
            IntPtr zero = IntPtr.Zero;

            int[]     numArray   = new int[AssemblyMetadataHelper.ENUM_TOKEN_BUF_SIZE];
            int       num4       = 0;
            ArrayList arrayLists = new ArrayList();

            try
            {
                do
                {
                    assemblyImport.EnumAssemblyRefs(ref zero, numArray, (int)numArray.Length, out num4);
                    for (int i = 0; i < num4; i++)
                    {
                        AssemblyMetadataHelper.AssemblyMetadataInfo assemblyMetadataInfo = new AssemblyMetadataHelper.AssemblyMetadataInfo();
                        assemblyImport.GetAssemblyRefProps(numArray[i], out intPtr1, out num1, null, 0, out num2, ref assemblyMetadataInfo, out intPtr, out num, out num3);
                        if (num2 > 1)
                        {
                            char[] chrArray = new char[num2 + 1];
                            assemblyImport.GetAssemblyRefProps(numArray[i], out intPtr1, out num1, chrArray, (int)chrArray.Length, out num2, ref assemblyMetadataInfo, out intPtr, out num, out num3);
                            byte[] numArray1 = new byte[num1];
                            Marshal.Copy(intPtr1, numArray1, 0, num1);
                            string  str     = new string(chrArray, 0, num2 - 1);
                            Version version = new Version((int)assemblyMetadataInfo.usMajorVersion, (int)assemblyMetadataInfo.usMinorVersion, (int)assemblyMetadataInfo.usBuildNumber, (int)assemblyMetadataInfo.usRevisionNumber);
                            arrayLists.Add(new AssemblyNameVersion(str, version, numArray1));
                        }
                    }
                }while (num4 > 0);
            }
            finally
            {
                if (zero != IntPtr.Zero)
                {
                    assemblyImport.CloseEnum(zero);
                }
            }
            return((AssemblyNameVersion[])arrayLists.ToArray(typeof(AssemblyNameVersion)));
        }
        public static AssemblyNameVersion GetAssemblyNameVersion(AssemblyMetadataHelper.IMetaDataAssemblyImport assemblyImport)
        {
            IntPtr intPtr;
            uint   num;
            uint   num1;
            int    num2;
            int    num3;

            if (assemblyImport == null)
            {
                return(null);
            }
            int assemblyFromScope = assemblyImport.GetAssemblyFromScope();

            AssemblyMetadataHelper.AssemblyMetadataInfo assemblyMetadataInfo = new AssemblyMetadataHelper.AssemblyMetadataInfo();
            assemblyImport.GetAssemblyProps(assemblyFromScope, out intPtr, out num, out num1, null, 0, out num2, ref assemblyMetadataInfo, out num3);
            if (num2 <= 1)
            {
                return(null);
            }
            char[] chrArray = new char[num2 + 1];
            assemblyImport.GetAssemblyProps(assemblyFromScope, out intPtr, out num, out num1, chrArray, (int)chrArray.Length, out num2, ref assemblyMetadataInfo, out num3);
            string  str     = new string(chrArray, 0, num2 - 1);
            Version version = new Version((int)assemblyMetadataInfo.usMajorVersion, (int)assemblyMetadataInfo.usMinorVersion, (int)assemblyMetadataInfo.usBuildNumber, (int)assemblyMetadataInfo.usRevisionNumber);

            byte[] numArray = new byte[num];
            Marshal.Copy(intPtr, numArray, 0, (int)num);
            AssemblyName assemblyName = new AssemblyName()
            {
                HashAlgorithm = (AssemblyHashAlgorithm)num1
            };

            if ((num3 & 1) == 0)
            {
                assemblyName.SetPublicKeyToken(numArray);
            }
            else
            {
                assemblyName.SetPublicKey(numArray);
            }
            return(new AssemblyNameVersion(str, version, assemblyName.GetPublicKeyToken()));
        }