예제 #1
0
 public static void ReleaseDispenser(AssemblyMetadataHelper.IMetaDataDispenserEx dispenser)
 {
     if (dispenser != null)
     {
         Marshal.ReleaseComObject(dispenser);
     }
 }
예제 #2
0
 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);
 }
예제 #3
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);
        }