can anyone please help me how can I set/store values in the app.config file using c#, is it possible at all?
- 
                    12Did you google this at all? – Adriaan Stander Jan 21 '11 at 12:08
- 
                    1Could you be a bit more specific? What kind of value is it you wan't to store, and when? Generally it's not really recommended to store Application-wide values (like strings or ints) in the App config. – Mantisen Jan 21 '11 at 12:09
- 
                    3Asking a question that seems stupid by pros is all right, everybody starts with the beginning. However, not even taking a simpe google search is just lame. – Dercsár Jan 21 '11 at 12:25
- 
                    3I tried and also googled, tried few ways, but was getting no luck. that's why i asked so.. – Rana Jan 21 '11 at 12:53
- 
                    Since you seem new to all this I want to add that the settings will need to be inside your.exe.config file. If you try to get or set from a dll (i.e. class library project or any other project except mstest projects from I have seen) it won't work. It WANTS your application exe file! You will need hackery otherwise. To be clear I am referring to using the ConfigurationManager for this. – Mike Cheel Jun 21 '16 at 19:03
11 Answers
Try the following code:
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Add("YourKey", "YourValue");
    config.Save(ConfigurationSaveMode.Minimal);
It worked for me :-)
 
    
    - 21,143
- 34
- 120
- 164
- 
                    Thanks, the namespace is System.Configuration. So System.Configuration.Configuration config = .... – Rob Nov 17 '14 at 18:22
- 
                    "Access to the path is denied" when i tried to install it. But when i try it in visual studio it works fine. Can you help me. – Reynan Nov 02 '16 at 11:15
On Framework 4.5 the AppSettings.Settings["key"] part of ConfigurationManager is read only so I had to first Remove the key then Add it again using the following:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Remove("MySetting");
config.AppSettings.Settings.Add("MySetting", "some value");
config.Save(ConfigurationSaveMode.Modified);
Don't worry, you won't get an exception if you try to Remove a key that doesn't exist.
This post gives some good advice
 
    
    - 337
- 3
- 4
private static string GetSetting(string key)
{
    return ConfigurationManager.AppSettings[key];
}
private static void SetSetting(string key, string value)
{
    Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    configuration.AppSettings.Settings[key].Value = value;
    configuration.Save(ConfigurationSaveMode.Full, true);
    ConfigurationManager.RefreshSection("appSettings");
}
 
    
    - 1,195
- 5
- 18
- 27
 
    
    - 391
- 3
- 6
- 
                    1I had to add configuration.AppSettings.Settings.Add(value); before configuration.AppSettings.Settings[key].Value = value; to get this to work when the .config file was empty. – Ed Bayiates Mar 10 '16 at 23:23
- 
                    1When using `Settings.Add()`, if the entry doesn't exist, it will be added, if it already exists, the value will be added to the existing value(s) separated by a comma. E.g. after calling `Settings.Add("myKey", "test")` 4 times, your entry will become: `` – Stacked Jun 21 '16 at 18:23 
- 
                    1ConfigurationManager.RefreshSection("appSettings"); was the key for me, if you don't do that, reading newly written values won't work. – Mr. Bungle Dec 02 '16 at 04:42
- 
                    1I would recommend using `ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name)` instead of the hard coded string. – Charles A. Aug 13 '20 at 16:32
If you are using App.Config to store values in <add Key="" Value="" />  or CustomSections section use ConfigurationManager class, else use XMLDocument class.
For example:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="server" value="192.168.0.1\xxx"/>
    <add key="database" value="DataXXX"/>
    <add key="username" value="userX"/>
    <add key="password" value="passX"/>
  </appSettings>
</configuration>
You could use the code posted on CodeProject
As others mentioned, you can do this with ConfigurationManager.AppSettings.Settings. But:
Using Settings[key] = value will not work if the key doesn't exist.
Using Settings.Add(key, value), if the key already exists, it will join the new value to its value(s) separated by a comma, something like
<add key="myKey" value="value1, value2, value3" />
To avoid these unexpected results, you have to handle two scenario's
- If entry with the given key exists? then update its value
- if entry with the given key doesn't exist? then create new entry(key,value)
Code
public static void Set(string key, string value)
{
    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    var entry = config.AppSettings.Settings[key];
    if (entry == null)
        config.AppSettings.Settings.Add(key, value);
    else
        config.AppSettings.Settings[key].Value = value;
    config.Save(ConfigurationSaveMode.Modified);
}
For more info about the check entry == null, check this post.
Hope this will help someone.
For a .NET 4.0 console application, none of these worked for me. So I used the following below and it worked:
private static void UpdateSetting(string key, string value)
{
    Configuration configuration = ConfigurationManager.
        OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
    configuration.AppSettings.Settings[key].Value = value;
    configuration.Save();
    ConfigurationManager.RefreshSection("appSettings");
}
 
    
    - 11,728
- 11
- 67
- 78
string filePath = System.IO.Path.GetFullPath("settings.app.config");
var map = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
try
{
    // Open App.Config of executable
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
    // Add an Application Setting if not exist
        config.AppSettings.Settings.Add("key1", "value1");
        config.AppSettings.Settings.Add("key2", "value2");
    // Save the changes in App.config file.
    config.Save(ConfigurationSaveMode.Modified);
    // Force a reload of a changed section.
    ConfigurationManager.RefreshSection("appSettings");
}
catch (ConfigurationErrorsException ex)
{
    if (ex.BareMessage == "Root element is missing.")
    {
        File.Delete(filePath);
        return;
    }
    MessageBox.Show(ex.Message);
}
 
    
    - 1,195
- 5
- 18
- 27
 
    
    - 395
- 5
- 22
- 
                    2This response is uniquely helpful in that it shows how to open an arbitrary named config file and not just *.exe.config files; unlike other responses. – David Burg Mar 08 '19 at 19:25
Try the following:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);            
config.AppSettings.Settings[key].Value = value;
config.Save();
ConfigurationManager.RefreshSection("appSettings");
 
    
    - 51
- 1
Yes you can - see ConfigurationManager
The ConfigurationManager class includes members that enable you to perform the following tasks:
- Read and write configuration files as a whole.
Learn to use the docs, they should be your first port-of call for a question like this.
 
    
    - 30,382
- 27
- 123
- 206
//if you want change
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings[key].Value = value;
//if you want add
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Add("key", value);
 
    
    - 71
- 3
I struggled with this for a while and finally figured it out on my own. I didn't find any help at the time, but wanted to share my approach. I have done this several times and used a different method than what is above. Not sure how robust it is, but it has worked for me.
Let's say you have a textbox named "txtName", a button named "btnSave" and you want to save the name so the next time you run your program the name you typed appears in that textbox.
- Go to Project>Properties>Settings and create a setting -
- name = "Name"
- type = "string"
- scope = "user"
- value you can leave blank.
Save your settings file.
- Go to your form where textbox and button exist. Double click your button and put this code in;
    //This tells your program to save the value you have to the properties file (app.config);
    //"Name" here is the name you used in your settings file above.
    Properties.Settings.Default.Name = txtName.txt;
    //This tells your program to make these settings permanent, otherwise they are only
    //saved for the current session
    Properties.Settings.Default.Save();
- Go to your form_load function and add this in there;
    //This tells your program to load the setting you saved above to the textbox
    txtName.txt = Properties.Settings.Default.Name;
- Debug your application and you should see the name you typed in.
- Check your application debug directory and you should see a .config file named after your program. Open that with a text editor and you will see your settings.
Notes -
- "Name" refers to the actual name of the setting you created.
- Your program will take care of creating the actual XML file, you don't have to worry about it.
 
     
     
     
     
     
    