[英]Reading nested values from App.config with ConfigurationManager
我有一個關於通過ConfigurationManager
從App.config
檢索值的問題。
這是我的App.config
。 我計划將這些值外包給printers.config
並通過printerOverrides configSource="printers.config" />
拉取值。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="printerOverrides">
<section name="host" type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
<section name="test" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<printerOverrides>
<host name="machine1">
<add key="defaultPrinter" value="Overridden" />
</host>
<host name="machine2">
<add key="defaultPrinter" value="Overridden" />
<add key="otherSetting" value="OtherSettingValue" />
</host>
</printerOverrides>
<test>
<add key="key1" value="value1" />
</test>
</configuration>
我能夠從<test>
-Section 獲取值,而此代碼段沒有任何問題:
var test = ConfigurationManager.GetSection("test") as NameValueCollection;
Debug.WriteLine(test["key1"]);
但是我無法通過 SectionGroup 元素中的部分檢索數據
var test = ConfigurationManager.GetSection("machine1") as NameValueCollection;
Debug.WriteLine(test["defaultPrinter"]);
或者
var test = ConfigurationManager.GetSection("printerOverrides/machine1") as NameValueCollection;
Debug.WriteLine(test["defaultprinter"]);
我的 XML 無效嗎? 或者我需要什么來獲取 SectionGroup 中嵌套部分的值
盡管配置中的 XML 有效,但配置本身無效。
節組配置不支持重復元素(每個元素必須是唯一的並單獨指定)。 此外, host
元素不能具有任何屬性。
你可以(有點)通過使用這樣的配置來實現你想要的:
<configSections>
<sectionGroup name="printerOverrides">
<section name="host1" type="System.Configuration.NameValueSectionHandler" />
<section name="host2" type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</configSections>
<printerOverrides>
<host1>
<add key="defaultPrinter" value="Overridden" />
</host1>
<host2>
<add key="defaultPrinter" value="Overridden" />
<add key="otherSetting" value="OtherSettingValue" />
</host2>
</printerOverrides>
然后這將起作用:
var test = ConfigurationManager.GetSection("printerOverrides/host1") as NameValueCollection;
Debug.WriteLine(test["defaultprinter"]);
如果這不符合您的需要,那么您將需要創建自定義配置節類。 請參閱如何在 app.config 中創建自定義配置部分?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.