System.Configuration.ConfigurationErrorsException - Unrecognized element 'setting'

c#, configurationmanager

Solution

I found the problem. In my config I had this:

  <AppInfo>
    <AutoPay.Common.Credentials>
      <setting name="UserName" serializeAs="String"><value>********</value></setting>
      <setting name="Password" serializeAs="String"><value>********</value></setting>
      <setting name="ServiceUrl" serializeAs="String"><value>********</value></setting>
    </AutoPay.Common.Credentials>
  </AppInfo>

I changed it to:

  <AppInfo>
    <AutoPay.Common.Credentials>
      <setting name="UserName" serializeAs="String">
        <value>********</value>
      </setting>
      <setting name="Password" serializeAs="String">
        <value>********</value>
      </setting>
      <setting name="ServiceUrl" serializeAs="String">
        <value>********</value>
      </setting>
    </AutoPay.Common.Credentials>
  </AppInfo>

Don't ask me why the underlying xml reader cannot differentiate between the two. However, problem solved! grrrr...

Problem

Unrecognized element 'setting'. (C:\Dev\DOT.NET\AutoPay\ibeam.config line 15) AppInfo.Sections.Get("AutoPay.Common.Credentials") 'AppInfo.Sections.Get("AutoPay.Common.Credentials")' threw an exception of type 'System.Configuration.ConfigurationErrorsException' System.Configuration.ConfigurationSection {System.Configuration.ConfigurationErrorsException} My config file: ``` <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="AppInfo" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="AutoPay.Common.Credentials" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> <AppInfo> <AutoPay.Common.Credentials> <setting name="UserName" serializeAs="String"><value>********</value></setting> <setting name="Password" serializeAs="String"><value>********</value></setting> <setting name="ServiceUrl" serializeAs="String"><value>********</value></setting> </AutoPay.Common.Credentials> </AppInfo> </configuration> ``` Base (abstract) class: ``` public abstract class BaseConfigInfo : ConfigurationSectionGroup { protected Configuration Configuration; protected ConfigurationSectionGroup AppInfo; protected ClientSettingsSection Credentials; protected BaseConfigInfo(string configFile) { var fileMap = new ConfigurationFileMap(configFile); Configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap); AppInfo = Configuration.GetSectionGroup("AppInfo"); // THIS IS WHERE THE ERROR POPS // Credentials = (ClientSettingsSection)AppInfo.Sections.Get("AutoPay.Common.Credentials"); } protected string GetCredentialsString(string kvpName) { var setting = Credentials.Settings.Get(kvpName); return setting.Value.ValueXml.InnerText; } public string UserName { get { return GetCredentialsString("UserName"); } } public string Password { get { return GetCredentialsString("Password"); } } public string ServiceUrl { get { return GetCredentialsString("ServiceUrl"); } } } ``` Sample concrete class: ``` public class ConfigInfoIbeam : BaseConfigInfo { public ConfigInfoIbeam() : base(ConfigurationManager.AppSettings["ConfigInfoIbeam"]) { } } ``` I know I am missing something simple here. I'm running in .NET 4. Nothing too usefull showing up when I try to google for this error. Any ideas?

Original source