ConfigurationManager.GetSection给出错误“无法从程序集中加载类型....”

时间:2013-09-30 13:14:00

标签: c# app-config system.configuration

我的 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”   '配置'。

我完全难过,如果有人能帮助我,我真的很感激。

2 个答案:

答案 0 :(得分:45)

在行中:

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

名称“配置”应该引用您正在构建的DLL,请尝试检查并在需要时进行更正。

此外,我认为您可能有一个拼写错误,在您的代码中,类型名称为:

ProcessesConfigurationSection

(注意流程与流程)

答案 1 :(得分:3)

由于调用程序集无法在指定的程序集中加载类类型,因此引发了此错误。此类错误可能是由类型名称后面的空格引起的(发生在我身上),例如以下配置部分

type="Configuration.ProcessConfigurationSection , Configuration"

也会生成此错误。