2011-09-04 89 views
1

我试过我第一次在app.settings中使用自定义配置。当我尝试调用配置时,出现“无法识别的配置节服务器”。我究竟做错了什么?app.settings自定义配置问题

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <sectionGroup name="servers" type="System.Configuration.NameValueSectionHandler"></sectionGroup> 
     <sectionGroup name="services" type="System.Configuration.NameValueSectionHandler"></sectionGroup> 
     <!--<section name="servers.myServers" type="System.Configuration.NameValueFileSectionHandler" />--> 
     <!--<section name="services.myServices" type="System.Configuration.NameValueFileSectionHandler" />--> 
     <section name="ServiceMonitor.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 

    <servers> 
    <myServers> 
     <add key="server1" value="myserverhost"/> 
    </myServers> 
    </servers> 

    <services> 
    <myServices> 
     <add key="service1" value="spooler"/> 
     <add key="service2" value="Apple Mobile Device"/> 
    </myServices> 
    </services> 

    <userSettings> 
    <ServiceMonitor.Properties.Settings> 
     <setting name="service1" serializeAs="String"> 
     <value>spooler</value> 
     </setting> 
     <setting name="service2" serializeAs="String"> 
     <value>Apple Mobile Device</value> 
     </setting> 
    </ServiceMonitor.Properties.Settings> 
    </userSettings> 
    <appSettings> 
    <add key="service1" value="spooler"/> 
    <add key="service2" value="Apple Mobile Device"/> 
    </appSettings> 

</configuration> 

这里是我用来调用配置的C#代码。

NameValueCollection settings = ConfigurationManager.GetSection("servers/myServers") as NameValueCollection; 
if (settings != null) 
{ 
    foreach (string key in settings) 
    { 
     Console.WriteLine("{0} : {1}", key, settings[key]); 
    } 
} 
+4

如果您的文件被命名为“app.settings”,那么这就解释了为什么它不起作用。你希望它被命名为“app.config”。 –

+0

我注意到你没有完全合格的班级名称;这可能是问题(虽然不确定,但我会把它放进去)。 –

回答

1

我认为你需要添加的部分元素(这是在你的例子注释掉):

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="services"> 
     <section name="myServices" 
     type="System.Configuration.NameValueSectionHandler" />    
    </sectionGroup> 
    </configSections> 
</configuration> 

为例见sectionGroup Element for configSections

+0

它已经挂在我的usersettings部分。无论如何,我不需要它,所以我将它剥离出来,现在它正在工作。 – Dovey

+0

@Dovey,你应该用解决方案回答你的问题并接受答案。 –