reading nested values from App.config with ConfigurationManager
我有一个关于通过
这是我的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?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"> </host> <host name="machine2"> </host> </printerOverrides> <test> </test> </configuration> |
我可以从
1 2 | var test = ConfigurationManager.GetSection("test") as NameValueCollection; Debug.WriteLine(test["key1"]); |
但是我也不能通过
2或
1 2 | var test = ConfigurationManager.GetSection("printerOverrides/machine1") as NameValueCollection; Debug.WriteLine(test["defaultprinter"]); |
我的XML无效吗?或者我需要什么来获取sectiongroup内嵌套节的值
尽管配置中的XML有效,但配置本身无效。
节组配置不支持重复元素(每个元素必须唯一并单独指定)。另外,
您可以通过使用这样的配置(某种程度上)实现您想要的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <configSections> <sectionGroup name="printerOverrides"> <section name="host1" type="System.Configuration.NameValueSectionHandler" /> <section name="host2" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </configSections> <printerOverrides> <host1> </host1> <host2> </host2> </printerOverrides> |
这样就可以了:
1 2 | var test = ConfigurationManager.GetSection("printerOverrides/host1") as NameValueCollection; Debug.WriteLine(test["defaultprinter"]); |
如果这不适合您的需要,那么您将需要创建自定义配置节类。请参见如何在app.config中创建自定义配置节?