.net 为什么我的ConfigurationElement没有从app.config读取其值?

.net 为什么我的ConfigurationElement没有从app.config读取其值?,.net,configuration,c#-4.0,.net,Configuration,C# 4.0,我正在使用System.Configuration.ConfigurationElement来表示app.config中的一些数据。它正确地检测到该节存在(如果该节不存在,则抛出错误),但从未正确填充该节。对于队列,我只得到一个空集合,而对于睡眠时间,我只得到500个 以下是相关的app.config部分: <serviceBroker sleepTime="1000"> <queues> <queue name="TestQueue" prio

我正在使用System.Configuration.ConfigurationElement来表示app.config中的一些数据。它正确地检测到该节存在(如果该节不存在,则抛出错误),但从未正确填充该节。对于队列,我只得到一个空集合,而对于睡眠时间,我只得到500个

以下是相关的app.config部分:

<serviceBroker sleepTime="1000"> 
  <queues>  
     <queue name="TestQueue" priority="1"/>
  </queues>
</serviceBroker>
这是我的配置部分(我去掉了许多其他工作正常的元素)


能否验证应用程序配置文件是否包含相关的配置节声明?要将配置节映射到实现它的类型,需要类似于以下内容的内容

<configuration>
  <configSections>
    <section name="SamConfigurationData" type="Namespace.DataConfigurationSection, AssemblyName"/>
  </configSections>

  <SamConfigurationData>
    <serviceBroker sleepTime="1000"> 
      <queues>  
        <queue name="TestQueue" priority="1"/>
      </queues>
    </serviceBroker>
  </SamConfigurationData>
</configuration>

能否验证应用程序配置文件是否包含相关的配置节声明?要将配置节映射到实现它的类型,需要类似于以下内容的内容

<configuration>
  <configSections>
    <section name="SamConfigurationData" type="Namespace.DataConfigurationSection, AssemblyName"/>
  </configSections>

  <SamConfigurationData>
    <serviceBroker sleepTime="1000"> 
      <queues>  
        <queue name="TestQueue" priority="1"/>
      </queues>
    </serviceBroker>
  </SamConfigurationData>
</configuration>

我没有发现任何错误,但我必须亲自尝试。这是我正在使用的版本,并将其与现有版本(包括缺少的部分)进行比较。如果您仍然看到发生了可怕的错误,可以将try/catch放在调用GetSection的位置

app.Config:

  <configSections>
    <section name="SAM.Configuration.Data" type="Test.DataConfigurationSection, Test" />
  </configSections>

  <SAM.Configuration.Data>
    <serviceBroker sleepTime="1000">
      <queues>
        <queue name="TestQueue" priority="1"/>
      </queues>
    </serviceBroker>
  </SAM.Configuration.Data>

我没有发现任何错误,但我必须亲自尝试。这是我正在使用的版本,并将其与现有版本(包括缺少的部分)进行比较。如果您仍然看到发生了可怕的错误,可以将try/catch放在调用GetSection的位置

app.Config:

  <configSections>
    <section name="SAM.Configuration.Data" type="Test.DataConfigurationSection, Test" />
  </configSections>

  <SAM.Configuration.Data>
    <serviceBroker sleepTime="1000">
      <queues>
        <queue name="TestQueue" priority="1"/>
      </queues>
    </serviceBroker>
  </SAM.Configuration.Data>

它基本上和配置部分的东西没有任何关系,我在Castle.Windsor中的所有东西都接线错误。它总是返回ServiceBrokerConfiguration的空实例,而不是从app.config加载的实例


谢谢大家的帮助

它基本上与配置部分的内容没有任何关系,我在Castle.Windsor中错误地连接了所有内容。它总是返回ServiceBrokerConfiguration的空实例,而不是从app.config加载的实例


谢谢大家的帮助

我假设配置末尾的`只是在stackoverflow中键入时发生的一个输入错误?是的,谢谢,我会清理它的,配置部分是如何定义的?erwin,C#side还是app.config side?@Dugan是从ConfigurationSection继承的类。我假设配置末尾的`只是在stackoverflow中键入时出现的一个打字错误?是的,谢谢,我会清理它的,配置节是如何定义的?erwin,C#side或app.config side?@Dugan是从ConfigurationSection继承的类。它是:另外,我认为XML名称中不能有
字符,因此,
SAM.Configuration.Data
不太可能用作配置节元素名称。您的配置是否有名为
SAM.Configuration.Data
(或类似)的元素来包含您的
serviceBroker
配置?(可能没有看到我最近的编辑)配置对于许多其他元素都可以正常工作,因此我认为
字符不应该是问题所在。是的,这里让我展示我的完整app.config,以避免一些混淆。它确实是:而且,我认为XML名称中不能有
字符,因此
SAM.Configuration.Data
不太可能用作配置节元素名。您的配置是否有一个名为
SAM.Configuration.Data
(或类似)包含您的
serviceBroker
配置?(可能没有看到我最近的编辑)配置对于许多其他元素都可以正常工作,因此我不认为
字符应该是问题所在。是的,这里让我展示我的完整app.config以避免一些混淆
  <configSections>
    <section name="SAM.Configuration.Data" type="Test.DataConfigurationSection, Test" />
  </configSections>

  <SAM.Configuration.Data>
    <serviceBroker sleepTime="1000">
      <queues>
        <queue name="TestQueue" priority="1"/>
      </queues>
    </serviceBroker>
  </SAM.Configuration.Data>
public class DataConfigurationSection : ConfigurationSection
{
    public const string SectionName = "SAM.Configuration.Data";

    private static DataConfigurationSection _configSection;

    [ConfigurationProperty("serviceBroker", IsRequired = false)]
    public ServiceBrokerConfigurationElement ServiceBroker
    {
        get
        {
            return (ServiceBrokerConfigurationElement)this["serviceBroker"];
        }
    }

    public static DataConfigurationSection Section
    {
        get
        {
            if (_configSection == null)
            {
                _configSection = ((DataConfigurationSection) ConfigurationManager.GetSection(SectionName)));
            }

            return _configSection;
        }
    }
}

public class ServiceBrokerConfigurationElement : ConfigurationElement
{
    [ConfigurationCollection(typeof(ServiceBrokerQueueElement), AddItemName = "queue")]
    [ConfigurationProperty("queues", IsRequired = true)]
    public ServiceBrokerQueueElementCollection Queues
    {
        get { return (ServiceBrokerQueueElementCollection)this["queues"]; }
    }

    [ConfigurationProperty("sleepTime", DefaultValue = (int)500, IsRequired = true)]
    public int SleepTime
    {
        get { return (int)this["sleepTime"]; }
    }
}

public class ServiceBrokerQueueElementCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new ServiceBrokerQueueElement();
    }

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

    public new ServiceBrokerQueueElement this[string name]
    {
        get
        {
            return (ServiceBrokerQueueElement)this.BaseGet(name);
        }
    }
}

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

    [ConfigurationProperty("priority", IsRequired = true)]
    public int Priority
    {
        get
        {
            return (int)this["priority"];
        }
        set
        {
            this["priority"] = value;
        }
    }
}