2012-04-26 6 views
4

私はApp.Configにいくつかのカスタム設定セクションを設定しました。これで、今のようなconfigSectionがあります。configSectionsの読み方

<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を返します。私は何かシンプルなものが欠けていると確信していますが、これを行う方法については何も見つかりません。

おかげ

+0

このようにする必要があると思います。var mySections = ConfigurationManager.GetSection( "Section1"); – HW90

+0

明確にするために、私は "Section1"というセクションを読む方法を完全に満足しています。私は "configSections"と呼ばれるセクションを読み込もうとしているので、私のコードでテキスト "Section1"をハードコードする必要はありません。その理由は、実行時に何を何部持っているかわからないからです。 – bornfromanegg

+0

別の言い方をすれば、私はApp.Configの "configSections"要素(上記)に含まれている "section"要素の "name"属性を読み取ることができます。 (これは説明が難しいです!) – bornfromanegg

答えて

5

は、宣言の構成セクションの名前を取得するにはConfiguration.Sections -propertyを使用してください。必要に応じて、必要に応じてConfigurationManager.GetSection()を使用して個々のセクションを取得します。あなたはセクションの外に見つけるために、それぞれのConfigurationSection.SectionInformationSectionInformation.IsDeclaredまたはConfigSourceの値を使用したい場合があり

注実際にあなたの設定ファイルで宣言された、またはmachine.configまたはそれ以外から継承されます。

例:最後に

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

、このアプローチは、あなただけの構成セクションを取得することに注意してください。コンフィグレーションセクションは返されません。コンフィグレーションセクションは<sectionGroup>の内部にあります。それらについては、最初にConfiguration.SectionGroups以上の反復が必要です。これはセクションごとのグループセクションを含むSectionsプロパティです。また、各ConfigurationSectionGroupインスタンスのSectionGroupsプロパティを介して再びアクセス可能なネストされたセクショングループを含めることもできます。

+0

ありがとうございます。それはまさに私が必要としているようです。乾杯! – bornfromanegg

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") 
関連する問題