private static void ValidateDuplicates(ModulesConfigurationSection section)
 {
     foreach (ModuleConfigurationElement data in section.Modules)
     {
         ICollection<ModuleConfigurationElement> found = section.Modules.FindAll(delegate(ModuleConfigurationElement match)
                                                                                     {
                                                                                         return
                                                                                             !string.IsNullOrEmpty(match.VirtualPath) &&
                                                                                             (String.Equals(match.VirtualPath,
                                                                                                            data.VirtualPath,
                                                                                                            StringComparison.
                                                                                                            	InvariantCultureIgnoreCase)
                                                                                              ||
                                                                                              String.Equals(match.AssemblyName,
                                                                                                            data.AssemblyName,
                                                                                                            StringComparison.
                                                                                                            	InvariantCultureIgnoreCase));
                                                                                     });
         if (found.Count > 1)
             ThrowConfigurationErrorsException(found);
     }
 }
 public ModulesConfigurationSection GetModuleConfigurationSection()
 {
     ModulesConfigurationSection globalSection = new ModulesConfigurationSection();
     PopulateSection(globalSection, _baseDirectory, true);
     return globalSection;
 }
        private ModulesConfigurationSection ParseSection(string filePath)
        {
            ModulesConfigurationSection section = new ModulesConfigurationSection();

            XmlDocument config = new XmlDocument();
            config.Load(filePath);
            XmlNodeList moduleList = config.SelectNodes(XpathCompositeWebModuleNode);
            if (moduleList == null || moduleList.Count == 0)
            {
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(config.NameTable);
                nsmgr.AddNamespace(QualifierXpath, NetConfigurationNamespace);
                moduleList = config.SelectNodes(QualifiedXpathCompositeWebModuleNode, nsmgr);
            }
            foreach (XmlNode module in moduleList)
            {
                string name = module.Attributes[NameAttribute].Value;
                string assemblyName = module.Attributes[AssemblyNameAttribute].Value;
                string virtualPath = null;
                if (module.Attributes[VirtualPathAttribute] != null)
                {
                    virtualPath = module.Attributes[VirtualPathAttribute].Value;
                }
                ModuleConfigurationElement data = new ModuleConfigurationElement(name, assemblyName, virtualPath);
                section.Modules.Add(data);
            }

            return section;
        }
 private void PopulateSection(ModulesConfigurationSection section, string rootDirectory, bool recursive)
 {
     foreach (string fileName in Directory.GetFiles(rootDirectory, "Web.Config", SearchOption.TopDirectoryOnly))
     {
         ModulesConfigurationSection localSection = ParseSection(Path.Combine(rootDirectory, fileName));
         if (localSection != null)
         {
             foreach (ModuleConfigurationElement module in localSection.Modules)
             {
                 if (!section.Modules.Contains(module.Name))
                 {
                     section.Modules.Add(module);
                 }
             }
         }
     }
     if (recursive)
     {
         foreach (string childDirectory in Directory.GetDirectories(rootDirectory))
         {
             PopulateSection(section, childDirectory, recursive);
         }
     }
 }
 private void PopulateSection(ModulesConfigurationSection section, string rootDirectory)
 {
     foreach (string fileName in Directory.GetFiles(rootDirectory, "Web.Config", SearchOption.TopDirectoryOnly))
     {
         System.Configuration.Configuration configuration = GetConfiguration(Path.Combine(rootDirectory, fileName));
         ModulesConfigurationSection localSection =
             (ModulesConfigurationSection) configuration.GetSection("compositeWeb/modules");
         if (localSection != null)
         {
             foreach (ModuleConfigurationElement module in localSection.Modules)
             {
                 if (!section.Modules.Contains(module.Name))
                 {
                     section.Modules.Add(module);
                 }
             }
         }
     }
     foreach (string childDirectory in Directory.GetDirectories(rootDirectory))
     {
         PopulateSection(section, childDirectory);
     }
 }