Write values in app.config file
C#C# Problem Overview
can anyone please help me how can I set/store values in the app.config file using c#, is it possible at all?
C# Solutions
Solution 1 - C#
Try the following code:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Add("YourKey", "YourValue");
config.Save(ConfigurationSaveMode.Minimal);
It worked for me :-)
Solution 2 - C#
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
Solution 3 - C#
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");
}
Solution 4 - C#
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
Solution 5 - C#
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.
Solution 6 - C#
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");
}
Solution 7 - C#
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);
}
Solution 8 - C#
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.
Solution 9 - C#
Try the following:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings[key].Value = value;
config.Save();
ConfigurationManager.RefreshSection("appSettings");
Solution 10 - C#
//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);
Solution 11 - C#
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.