Search code examples
c#.net.net-coreweb-configapp-config

Pros and cons of AppSettings vs applicationSettings (.NET app.config / Web.config)


When developing a .NET Windows Forms Application we have the choice between those App.config tags to store our configuration values. Which one is better?

<configuration>

  <!-- Choice 1 -->
  <appSettings>
    <add key="RequestTimeoutInMilliseconds" value="10000"/>
  </appSettings>

  <!-- Choice 2 -->
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
        <section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <applicationSettings>
    <Project1.Properties.Settings>
      <setting name="TABLEA" serializeAs="String">
        <value>TABLEA</value>
      </setting>
    </Project1.Properties.Settings>
  </applicationSettings>

</configuration>

Solution

  • The basic <appSettings> is easier to deal with - just slap in a <add key="...." value="..." /> entry and you're done.

    The downside is: there's no type-checking, e.g. you cannot safely assume your number that you wanted to configure there really is a number - someone could put a string into that setting..... you just access it as ConfigurationManager["(key)"] and then it's up to you to know what you're dealing with.

    Also, over time, the <appSettings> can get rather convoluted and messy, if lots of parts of your app start putting stuff in there (remember the old windows.ini file? :-)).

    If you can, I would prefer and recommend using your own configuration sections - with .NET 2.0, it's really become quite easy, That way, you can:

    • a) Define your configuration settings in code and have them type-safe and checked
    • b) You can cleanly separate YOUR settings from everyone else's. And you can reuse your config code, too!

    There's a series of really good articles on you to demystify the .NET 2.0 configuration system on CodeProject:

    1. Unraveling the mysteries of .NET 2.0 configuration

    2. Decoding the mysteries of .NET 2.0 configuration

    3. Cracking the mysteries of .NET 2.0 configuration

    Highly recommended! Jon Rista did a great job explaining the configuration system in .NET 2.0.