public static void ReleaseAssemblyImport(AssemblyMetadataHelper.IMetaDataAssemblyImport assemblyImport)
 {
     if (assemblyImport != null)
     {
         Marshal.ReleaseComObject(assemblyImport);
     }
 }
        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 AssemblyMetadataHelper.IMetaDataAssemblyImport OpenScope(AssemblyMetadataHelper.IMetaDataDispenserEx dispenser, string path)
 {
     if (dispenser == null || path == null || !PathHelper.FileExists(path))
     {
         return(null);
     }
     AssemblyMetadataHelper.IMetaDataImport         metaDataImport         = dispenser.OpenScope(path, 18, ref AssemblyMetadataHelper.IID_IMetaDataImport);
     AssemblyMetadataHelper.IMetaDataAssemblyImport metaDataAssemblyImport = metaDataImport as AssemblyMetadataHelper.IMetaDataAssemblyImport;
     if (metaDataImport != null && metaDataAssemblyImport == null)
     {
         Marshal.ReleaseComObject(metaDataImport);
     }
     return(metaDataAssemblyImport);
 }
        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()));
        }
Example #5
0
        public static bool IsSilverlightAssembly(string path)
        {
            bool flag;

            AssemblyMetadataHelper.IMetaDataDispenserEx    dispenser = AssemblyMetadataHelper.GetDispenser();
            AssemblyMetadataHelper.IMetaDataAssemblyImport metaDataAssemblyImport = AssemblyMetadataHelper.OpenScope(dispenser, path);
            if (metaDataAssemblyImport != null)
            {
                try
                {
                    AssemblyNameVersion assemblyNameVersion = AssemblyMetadataHelper.GetAssemblyNameVersion(metaDataAssemblyImport);
                    if (assemblyNameVersion == null || !assemblyNameVersion.Name.Equals("mscorlib", StringComparison.OrdinalIgnoreCase) || !ProjectAssemblyHelper.ComparePublicKeyTokens(SilverlightProjectHelper.SilverlightPublicKeyToken, assemblyNameVersion.PublicKeyToken))
                    {
                        bool flag1 = false;
                        AssemblyNameVersion[] assemblyReferenceNameVersion = AssemblyMetadataHelper.GetAssemblyReferenceNameVersion(metaDataAssemblyImport);
                        if (assemblyReferenceNameVersion != null)
                        {
                            AssemblyNameVersion[] assemblyNameVersionArray = assemblyReferenceNameVersion;
                            int num = 0;
                            while (num < (int)assemblyNameVersionArray.Length)
                            {
                                AssemblyNameVersion assemblyNameVersion1 = assemblyNameVersionArray[num];
                                if (!assemblyNameVersion1.Name.Equals("mscorlib", StringComparison.OrdinalIgnoreCase))
                                {
                                    num++;
                                }
                                else
                                {
                                    flag1 = true;
                                    if (!ProjectAssemblyHelper.ComparePublicKeyTokens(SilverlightProjectHelper.SilverlightPublicKeyToken, assemblyNameVersion1.PublicKeyToken))
                                    {
                                        break;
                                    }
                                    flag = true;
                                    return(flag);
                                }
                            }
                            if (!flag1)
                            {
                                flag = true;
                                return(flag);
                            }
                        }
                        return(false);
                    }
                    else
                    {
                        flag = true;
                    }
                }
                finally
                {
                    if (metaDataAssemblyImport != null)
                    {
                        AssemblyMetadataHelper.ReleaseAssemblyImport(metaDataAssemblyImport);
                    }
                    if (dispenser != null)
                    {
                        AssemblyMetadataHelper.ReleaseDispenser(dispenser);
                    }
                }
                return(flag);
            }
            return(false);
        }