Tutorial :Simplest way to have a configuration file in a Windows Forms C# Application


I'm really new to .NET and I still didn't get the hang about how config files work.

Every time I search on google about it I get results about web.config, but I'm writing a windows forms application.

I figured out that I need to use the System.Configuration namespace but the documentation isn't helping.

How do I define that my config file is XYZ.xml? Or does it have a "default" name for the config file? I still didn't get that.

Also, how do I define a new section, do I really need to create a class which inherits from ConfigurationSection?

I would like to just have a config file with some values like this:

<MyCustomValue>1</MyCustomValue>  <MyCustomPath>C:\Some\Path\Here</MyCustomPath>  

Is there a simple way to do it? Can you explain in a simple way how to read and write from/to a simple configuration file?


You want to use an App.Config.

When you add a new item to a project there is something called Applications Configuration file. Add that.

Then you add keys in the configuration/appsettings section


<configuration>   <appSettings>    <add key="MyKey" value="false"/>  

Access the members by doing


This works in .net 2 and above.


Clarification of previous answers...

1) Add a new file to your project (Add->New Item->Application Configuration File)

2) The new config file will appear in Solution Explorer as App.Config.

3) Add your settings into this file using the following as a template

<configuration>    <appSettings>      <add key="setting1" value="key"/>    </appSettings>    <connectionStrings>      <add name="prod" connectionString="YourConnectionString"/>    </connectionStrings>  </configuration>  

4)Retrieve them like this :

private void Form1_Load(object sender, EventArgs e)  {      string setting = ConfigurationManager.AppSettings["setting1"];      string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;  }  

5) When built, your output folder will contain a file called <assemblyname>.exe.config This will be a copy of the App.Config file. No further work should need to be done by the developer to create this file.


From a quick read of the previous answers, they look correct, but it doesn't look like anyone mentioned the new configuration facilities in VS 2008. It still uses app.config (copied at compile time to YourAppName.exe.config), but there is a UI widget to set properties and specifiy their types. Double-click Settings.settings in your project's "Properties" folder.

The best part is that accessing this property from code is typesafe - the compiler will catch obvious mistakes like mistyping the property name. For example, a property called MyConnectionString in app.config would be accessed like:

string s = Properties.Settings.Default.MyConnectionString;  


You should create an App.config file (very similar to web.config)

You should right click on your project, add new item, new "Application Configuration File".

Ensure that you add using System.Configuration to your project.

Then you can add values to it

<?xml version="1.0" encoding="utf-8" ?>  <configuration>    <appSettings>      <add key="setting1" value="key"/>    </appSettings>    <connectionStrings>      <add name="prod" connectionString="YourConnectionString"/>    </connectionStrings>  </configuration>  

    private void Form1_Load(object sender, EventArgs e)      {          string setting = ConfigurationManager.AppSettings["setting1"];          string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;      }  

Just a note, according to Microsoft, you should use ConfigurationManager instead of ConfigurationSettings. (see the remarks section) "The ConfigurationSettings class provides backward compatibility only. For new applications you should use the ConfigurationManager class or WebConfigurationManager class instead. "


The default name for a configuration file is [yourexe].exe.config. So notepad.exe will have a configuration file named notepad.exe.config, in the same folder as the program. This is a general configuration file for all aspects of the CLR and Framework, but can contain your own settings under an <appSettings> node.

The <appSettings> element creates a collection of name-value pairs which can be accessed as System.Configuration.ConfigurationSettings.AppSettings. There is no way to save changes back to the configuration file, however.

It is also possible to add your own custom elements to a configuration file - for example, to define a structured setting - by creating a class that implements IConfigurationSectionHandler and adding it to the <configSections> element of the configuration file. You can then access it by calling ConfigurationSettings.GetConfig.

.NET 2.0 adds a new class, System.Configuration.ConfigurationManager, which supports multiple files, with per-user overrides of per-system data. It also supports saving modified configurations back to settings files.

Visual Studio creates a file called App.config, which it copies to the EXE folder, with the correct name, when the project is built.


The best ( IMHO ) article about .NET Application configuration is on CodeProject Unraveling the Mysteries of .NET 2.0 Configuration. And my next favorite (shorter) article about sections in .net configuration files is Understanding Section Handlers - App.config File.


In Windows forms, you have an app.config, which is very similar to web.config. But since what I see you need it for are custom values, I suggest using Settings. To do that, open your project properties, then go to settings. If a settings file does not exist you will have a link to create one. Then, you can add the settings to the table you see there, which would generate both the appropriate XML, and a Settings class that can be used to load and save the settings. The settings class will be named something like DefaultNamespace.Properties.Settings. Then, you can use code similar to:

using DefaultNamespace.Properties;    namespace DefaultNamespace {      class Class {          public int LoadMySettingValue() {              return Settings.Default.MySettingValue;          }          public void SaveMySettingValue(int value) {              Settings.Default.MySettingValue = value;          }      }  }  


I agree with the other answers that point you to app.config. However, rather than reading values directly from app.config, you should create a utility class (AppSettings is the name I use) to read them and expose them as properties. The AppSettings class can be used to aggregate settings from several stores, such as values from app.config and application version info from the assembly (AssemblyVersion and AssemblyFileVersion).


A very simple way of doing this is to use your your own custom Settings class.



AppSettings has been deprecated and is now considered obsolete. [ link ]

In addition the appSettings section of the app.config has been replaced by the applicationSettings section.

As someone else mentioned, you should be using System.Configuration.ConfigurationManager [ link ] which is new for .Net 2.0


What version of .Net and VS are you using?

When you created the new project, you should have a file in your solution called app.config, that is the default configuration file.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »