Подтвердить что ты не робот

ConfigurationManager.GetSection Дает ошибку "Не удалось загрузить тип... из сборки..."

Мой файл app.config выглядит следующим образом:

<?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>

У меня есть следующие (отдельные) классы, чтобы получить конфигурацию:

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;
            }
        }
    }
}

Однако, когда я нажимаю эту строку кода:

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

Я получаю сообщение об ошибке:

Произошла ошибка при создании обработчика раздела конфигурации для ProcessConfiguration: не удалось загрузить тип 'Configuration.ProcessConfigurationSection' из сборки 'Конфигурация'.

Я полностью в тупике, если кто-нибудь может мне помочь, я бы очень признателен.

4b9b3361

Ответ 1

В строке:

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

Имя "Конфигурация" должно ссылаться на DLL, которую вы строите, попробуйте проверить это и при необходимости исправить.

Также я думаю, что у вас может быть опечатка, в вашем коде имя типа:

ProcessesConfigurationSection

(Обратите внимание на процессы и процесс)

Ответ 2

Эта ошибка была поднята, потому что вызывающая сборка не смогла загрузить тип класса в указанной сборке. Эта ошибка может быть вызвана пробелом после имени типа (что произошло со мной), например, следующий раздел конфигурации

type="Configuration.ProcessConfigurationSection , Configuration"

также генерирует эту ошибку.