web-dev-qa-db-fra.com

ConfigurationManager.GetSection donne l'erreur "Impossible de charger le type .... à partir de l'assembly ..."

Mon fichier app.config est le suivant:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="ProcessConfiguration" type="Configuration.ProcessConfigurationSection, Configuration" />
    </configSections>
    <ProcessConfiguration>
        <processes>
            <process name="Process1" />
        </processes>
    </ProcessConfiguration>
</configuration>

J'ai les classes (séparées) suivantes pour obtenir la configuration:

namespace Configuration
{
    using System.Configuration;

    public class ProcessesConfigurationSection : ConfigurationSection
    {
        [ConfigurationProperty("processes", IsDefaultCollection = false)]
        [ConfigurationCollection(typeof(ProcessCollection))]
        public ProcessCollection Processes
        {
            get
            {
                return (ProcessCollection)base["processes"];
            }
        }
    }
}

namespace Configuration
{
    using System.Configuration;

    public class ProcessCollection : ConfigurationElementCollection
    {
        public ProcessConfig this[int index]
        {
            get
            {
                return (ProcessConfig)BaseGet(index);
            }

            set
            {
                BaseAdd(index, value);
            }
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((ProcessConfig)element).Name;
        }

        protected override ConfigurationElement CreateNewElement()
        {
            return new ProcessConfig();
        }
    }
}

namespace Configuration
{
    using System.Configuration;

    public class ProcessConfig : ConfigurationElement
    {
        [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
        public string Name 
        {
            get
            {
                return (string)this["name"];
            }
            set
            {
                this["name"] = value;
            }
        }
    }
}

Cependant, lorsque je frappe cette ligne de code:

var processConfigurationSection = ConfigurationManager.GetSection("ProcessConfiguration") as ProcessesConfigurationSection;

J'obtiens l'erreur qui dit:

Une erreur s'est produite lors de la création du gestionnaire de section de configuration pour ProcessConfiguration: impossible de charger le type "Configuration.ProcessConfigurationSection" à partir de l'assembly "Configuration".

Je suis complètement perplexe, si quelqu'un peut m'aider, je l'apprécierais vraiment.

24
RichardB

Dans la ligne:

<section name="ProcessConfiguration" type="Configuration.ProcessConfigurationSection, Configuration" />

Le nom 'Configuration' doit faire référence à la DLL que vous construisez, veuillez essayer de la vérifier et de la corriger si nécessaire.

Je pense aussi que vous pouvez avoir une faute de frappe, dans votre code, le nom du type est:

ProcessesConfigurationSection

(Notez les processus vs processus)

47
Justin Harvey

Cette erreur a été déclenchée car l'assembly appelant n'a pas pu charger le type de classe dans l'assembly spécifié. Cette erreur peut être causée par un espace après le nom du type (ce qui m'est arrivé), par exemple la section de configuration suivante

type="Configuration.ProcessConfigurationSection , Configuration"

générera également cette erreur.

3
AAAA