微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – ConfigurationSection ConfigurationManager.GetSection()始终返回null

我正在尝试学习如何使用ConfigurationSection类.我曾经使用IConfigurationSectionHandler,但发布它已被贬值.所以成为一个好小伙子,我正在尝试“正确”的方式.我的问题是它总是返回null.

我有一个控制台应用程序和一个DLL.

class Program
{
    static void Main(string[] args)
    {           
        StandardConfigSectionHandler section = StandardConfigSectionHandler.GetConfiguration();

        string value = section.Value;
    }
}

应用配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <sectionGroup name="ConfigSectionGroup">
      <section name="ConfigSection" type="Controller.StandardConfigSectionHandler,Controller" />
    </sectionGroup>
  </configSections>

  <ConfigSectionGroup>
    <ConfigSection>
      <test value="1" />
    </ConfigSection>
  </ConfigSectionGroup>

</configuration>

DLL中的section handler:

namespace Controller
{    
    public class StandardConfigSectionHandler : ConfigurationSection
    {
    private const string ConfigPath = "ConfigSectionGroup/ConfigSection/";

    public static StandardConfigSectionHandler GetConfiguration()
    {
        object section = ConfigurationManager.GetSection(ConfigPath);
        return section as StandardWcfConfigSectionHandler;
    }

    [ConfigurationProperty("value")]
    public string Value
    {
        get { return (string)this["value"]; }
        set { this["value"] = value; }
    }
  }
}

有什么值得我尝试的“ConfigPath”它将返回null,或者抛出一个错误,说“test”是一个无法识别的元素.我试过的价值:

> ConfigSectionGroup
> ConfigSectionGroup /
> ConfigSectionGroup / ConfigSection
> ConfigSectionGroup / ConfigSection /
> ConfigSectionGroup / ConfigSection / test
> ConfigSectionGroup / ConfigSection / test /

解决方法

你的代码有几个错误.

>你总是在你的GetConfiguration方法中返回null,但是我将假设这只是在问题中,而不是在你的实际代码中.
>更重要的是,ConfigPath值的格式不正确.您有一个尾部斜杠ConfigSectionGroup / ConfigSection /,删除最后一个斜杠,它将能够找到该部分.
>最重要的是,您声明部分的配置系统将会将您的“值”存储在ConfigSection元素的属性中.喜欢这个

<ConfigSectionGroup>
  <ConfigSection value="foo" />
</ConfigSectionGroup>

所以,把它放在一起:

public class StandardConfigSectionHandler : ConfigurationSection
{
    private const string ConfigPath = "ConfigSectionGroup/ConfigSection";

    public static StandardConfigSectionHandler GetConfiguration()
    {
        return (StandardConfigSectionHandler)ConfigurationManager.GetSection(ConfigPath);
    }

    [ConfigurationProperty("value")]
    public string Value
    {
        get { return (string)this["value"]; }
        set { this["value"] = value; }
    }
}

要了解有关如何配置配置部分的更多信息,请参阅这个出色的MSDN文档:How to: Create Custom Configuration Sections Using ConfigurationSection.它还包含有关如何将配置值存储在(像您的测试元素)的子元素中的信息.

原文地址:https://www.jb51.cc/csharp/94642.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐