4

我在我的 App.Config 中设置了一些自定义配置部分,因此我现在有一个看起来像这样的 configSection。

<configSections>
    <section name="Section1" type="ConfigSections.MySection, MyNamespace"/>    
    <section name="Section2" type="ConfigSections.MySection, MyNamespace"/>    
    <section name="Section3" type="ConfigSections.MySection, MyNamespace"/>    
</configSections>

我想做的是在代码中阅读这一部分,以便在运行时找出我有哪些部分。我试过了:

var mySections = ConfigurationManager.GetSection("configSections");

但这返回null。我确定我错过了一些简单的东西,但我找不到任何关于如何做到这一点的信息。

谢谢

4

2 回答 2

6

使用Configuration.Sections-property 获取声明的配置节的名称。然后,如果需要,可以选择使用ConfigurationManager.GetSection()来检索单个部分。

请注意,您可能希望使用相应的SectionInformation.IsDeclaredConfigSource的值ConfigurationSection.SectionInformation来找出该部分实际上是在您的配置文件中声明的,还是继承自machine.config或以其他方式。

例子:

    var cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    var localSections = cfg.Sections.Cast<ConfigurationSection>()
       .Where(s => s.SectionInformation.IsDeclared);

最后,请注意,这种方法只会让您获得配置部分。它不会返回配置部分,这些配置部分本身位于<sectionGroup>. 对于他们,您首先需要 iterate over Configuration.SectionGroups,它有自己的Sections-property 包含每个部分组部分。它还可以包含嵌套的部分组,再次通过SectionGroups每个ConfigurationSectionGroup实例的属性访问。

于 2012-04-26T11:33:54.970 回答
0

如果将所有部分放入一个部分组中,这将起作用:

<configSections>
      <sectionGroup name="FMGlobal.Common.SecuritySubsystem.ADAzManFeed">
        <section name="ADFolders" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </sectionGroup>
    </configSections>

  var  NVC = (ConfigurationManager.GetSection( _
    "FMGlobal.Common.SecuritySubsystem.ADAzManFeed")
于 2012-04-26T11:23:15.453 回答