首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取ConfigurationSection

读取ConfigurationSection
EN

Stack Overflow用户
提问于 2016-12-07 22:37:57
回答 3查看 101关注 0票数 0

我正在编写一个Windows,它需要从app.config获得一些信息--我知道我可以使用AppSettings,但我正在尝试更好地理解配置部分。

我修改了我的App.Config:

代码语言:javascript
复制
<configuration>
  <startup>
    <supportedRuntime sku=".NETFramework,Version=v4.0"
                      version="v4.0"/>
  </startup>

  <configSections>
    <section name="config"
             type="MyNamespace.MyConfigurationSection"/>
  </configSections>

  <config aNumber="1"
          aBoolean="false"/>

</configuration>

并创建了以下类:

代码语言:javascript
复制
public sealed class MyConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("aNumber", DefaultValue = 1, IsRequired = false)]
    public int Number
    {
        get { return (int) this["aNumber"]; }
        set { this["aNumber"] = value; }
    }

    [ConfigurationProperty("aBoolean", DefaultValue = false, IsRequired = false)]
    public bool Boolean
    {
        get { return (bool) this["aBoolean"]; }
        set { this["aBoolean"] = value; }
    }
}

我试着像这样访问它:

代码语言:javascript
复制
public MyConfigurationSection ConfigSection
{
    get
    {
        var configurationSection = Configuration.GetSection("config");
        return (MyConfigurationSection) configurationSection;
    }
}

private static Configuration Configuration
{
    get { return ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); }
}

在我到达(MyConfigurationSection) configurationSection演员之前,一切都很好。我要从我打给GetSection()的电话中得到一个GetSection(),而这个转换失败了。

我到哪里去了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-08 00:13:37

这里的问题是,您必须在app.config中的部分配置中使用类型值作为“app.config,Namespace”,更重要的是,configSections必须是app.config中根配置元素的第一个子元素。

下面的配置可能适用于您:

代码语言:javascript
复制
<configuration>
      <!-- <configSections> is moved to first child of <configuration> -->
      <configSections>
        <section name="config"
                 type="MyNamespace.MyConfigurationSection, MyNamespace"/>
      </configSections>

      <config aNumber="1"
              aBoolean="false"/>

      <startup>
        <supportedRuntime sku=".NETFramework,Version=v4.0"
                          version="v4.0"/>
      </startup>
</configuration>
票数 1
EN

Stack Overflow用户

发布于 2016-12-07 22:59:51

可能吧,尽管没有检查,

代码语言:javascript
复制
type="MyNamespace.MyConfigurationSection"/>

应该是

代码语言:javascript
复制
type="<Namespace.ClassName>,<Namespace>"/>
票数 1
EN

Stack Overflow用户

发布于 2016-12-07 23:21:12

config是一个保留字,不能用于配置节的名称。您也不应该给变量命名布尔值。

尝试以下示例:

代码语言:javascript
复制
using System.Configuration;

namespace ConfigSectionSample
{
    internal class MyConfigurationSection : ConfigurationSection
    {
        public static MyConfigurationSection Current
        {
            get
            {
                return (MyConfigurationSection)ConfigurationManager.GetSection("myConfig");
            }
        }

        [ConfigurationProperty("aNumber", IsRequired = true)]
        public int Number
        {
            get
            {
                return (int)this["aNumber"];
            }
        }

        [ConfigurationProperty("aBoolean", IsRequired = true)]
        public bool Boolean
        {
            get
            {
                return (bool)this["aBoolean"];
            }
        }
    }
}

使用下面的应用程序,配置

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="myConfig" type="ConfigSectionSample.MyConfigurationSection, ConfigSectionSample"></section>
  </configSections>

  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>

  <myConfig aNumber="1" aBoolean="false" />
</configuration>

得到这样的值:

代码语言:javascript
复制
        Console.WriteLine("Number: " + MyConfigurationSection.Current.Number);
        Console.WriteLine("Boolean: " + MyConfigurationSection.Current.Boolean);
        Console.ReadLine();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41028645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档