//----------------------------------------------------------
        // GetNextDependentFileInfo
        //----------------------------------------------------------
        public DependentFileInfo GetNextDependentFileInfo()
        {
            if (_dependentFiles == null)
            {
                _dependentFiles = _assembly.GetModules(true);
            }

            if (_fileCount >= _dependentFiles.Length)
            {
                return(null);
            }

            if (String.Compare(_dependentFiles[_fileCount].ScopeName, _manifestFileName) == 0)
            {
                _fileCount++;
            }

            if (_fileCount >= _dependentFiles.Length)
            {
                return(null);
            }

            DependentFileInfo dfi = new DependentFileInfo();

            dfi["name"] = _dependentFiles[_fileCount].ScopeName;
            dfi["hash"] = null;             // damn, we have to fix this!!!!
            _fileCount++;
            return(dfi);
        }
        public static IAssemblyManifestImport GetAssemblyManifestImport(string fileName)
        {
            DefaultAssemblyManifestImport retVal = null;
            AssemblyManifestParser        amp    = new AssemblyManifestParser();

            string fullPath = Path.GetFullPath(fileName);

            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException("The path " + fullPath + " does not refer to a file.");
            }
            else
            {
                bool checkInit = amp.InitFromFile(fileName);
                if (checkInit)
                {
                    AssemblyIdentity impAssmID = amp.GetAssemblyIdentity();
                    int numDepAssms            = amp.GetNumDependentAssemblies();
                    DependentAssemblyInfo[] impDepAssmInfoArr = new DependentAssemblyInfo[numDepAssms];
                    for (int i = 0; i < numDepAssms; i++)
                    {
                        impDepAssmInfoArr[i] = amp.GetDependentAssemblyInfo(i);
                        if (impDepAssmInfoArr[i] == null)
                        {
                            throw new BadImageFormatException("Cannot access dependent assembly information from " + fullPath);
                        }
                    }
                    int numDepFiles = amp.GetNumDependentFiles();
                    DependentFileInfo[] impDepFileInfoArr = new DependentFileInfo[numDepFiles];
                    for (int i = 0; i < numDepFiles; i++)
                    {
                        impDepFileInfoArr[i] = amp.GetDependentFileInfo(i);
                        if (impDepFileInfoArr[i] == null)
                        {
                            throw new BadImageFormatException("Cannot access dependent file information from " + fullPath);
                        }
                    }
                    retVal = new DefaultAssemblyManifestImport(impAssmID, impDepAssmInfoArr, impDepFileInfoArr);
                }
                else
                {
                    throw new BadImageFormatException("The file " + fullPath + " is not an assembly.");
                }
            }
            return(retVal);
        }
        //----------------------------------------------------------
        // GetNextDependentFileInfo
        //----------------------------------------------------------
        public DependentFileInfo GetNextDependentFileInfo()
        {
            if (_xPathFileIterator == null)
            {
                XPathNavigator myXPathNavigator = _xmlDocument.CreateNavigator();
                _xPathFileIterator = myXPathNavigator.Select("/assembly/file");
            }

            if (_xPathFileIterator.MoveNext() == false)
            {
                return(null);
            }

            DependentFileInfo dfi = new DependentFileInfo();

            dfi["name"] = _xPathFileIterator.Current.GetAttribute("name", "");
            dfi["hash"] = _xPathFileIterator.Current.GetAttribute("hash", "");
            return(dfi);
        }