public AssemblyBinaryProperties GetAssemblyBinaryProperties(string assemblyFileName)
        {
            if (!File.Exists(assemblyFileName))
            {
                return(AssemblyBinaryProperties.GetEmpty());
            }

            AssemblyDefinition assemblyDefinition = LoadAssembly(assemblyFileName);
            ModuleDefinition   mainModule         = assemblyDefinition.MainModule;

            string keyFileName  = null;
            string keyContainer = null;

            foreach (CustomAttribute customAttribute in assemblyDefinition.CustomAttributes)
            {
                switch (customAttribute.Constructor.DeclaringType.FullName)
                {
                case "System.Reflection.AssemblyKeyFileAttribute":
                    keyFileName = Convert.ToString(customAttribute.ConstructorArguments[0], CultureInfo.InvariantCulture);
                    break;

                case "System.Reflection.AssemblyKeyNameAttribute":
                    keyContainer = Convert.ToString(customAttribute.ConstructorArguments[0], CultureInfo.InvariantCulture);
                    break;
                }

                if (!string.IsNullOrEmpty(keyFileName) && !string.IsNullOrEmpty(keyContainer))
                {
                    break;
                }
            }

            try
            {
                return(new AssemblyBinaryProperties
                       (
                           mainModule.Attributes,
                           mainModule.Architecture,
                           assemblyDefinition.Name.HasPublicKey,
                           keyFileName,
                           keyContainer
                       ));
            }
            finally
            {
                assemblyDefinition.Dispose(); // 0.10.x
            }
        }
        public AssemblyBinaryProperties GetAssemblyBinaryProperties(
            string assemblyFileName)
        {
            AssemblyBinaryProperties binaryProperties;

            if (!File.Exists(assemblyFileName))
            {
                binaryProperties = AssemblyBinaryProperties.GetEmpty();
            }
            else
            {
                AssemblyDefinition assemblyDefinition = this.LoadAssembly(assemblyFileName);
                ModuleDefinition   mainModule         = assemblyDefinition.MainModule;
                string             keyFileName        = (string)null;
                string             keyContainer       = (string)null;
                foreach (CustomAttribute customAttribute in assemblyDefinition.CustomAttributes)
                {
                    switch (customAttribute.Constructor.DeclaringType.FullName)
                    {
                    case "System.Reflection.AssemblyKeyFileAttribute":
                        keyFileName = Convert.ToString((object)customAttribute.ConstructorArguments[0], (IFormatProvider)CultureInfo.InvariantCulture);
                        break;

                    case "System.Reflection.AssemblyKeyNameAttribute":
                        keyContainer = Convert.ToString((object)customAttribute.ConstructorArguments[0], (IFormatProvider)CultureInfo.InvariantCulture);
                        break;
                    }
                    if (!string.IsNullOrEmpty(keyFileName))
                    {
                        if (!string.IsNullOrEmpty(keyContainer))
                        {
                            break;
                        }
                    }
                }
                binaryProperties = new AssemblyBinaryProperties(mainModule.Attributes, mainModule.Architecture, assemblyDefinition.Name.HasPublicKey, keyFileName, keyContainer);
            }
            return(binaryProperties);
        }