Is there any supported API in .NET 2.0 for writing to the userSettings section of the main exe\'s .config file?
Th
After some research I came up with this solution. It is a bit low level, but still goes through the .NET configuration API without having to manually parse the .config file.
static void SaveUserSettingDefault(string clientSectionName, string settingName, object settingValue)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// find section group
ConfigurationSectionGroup group = config.SectionGroups[@"userSettings"];
if (group == null) return;
// find client section
ClientSettingsSection clientSection = group.Sections[clientSectionName] as ClientSettingsSection;
if (clientSection == null) return;
// find setting element
SettingElement settingElement = null;
foreach (SettingElement s in clientSection.Settings)
{
if (s.Name == settingName)
{
settingElement = s;
break;
}
}
if (settingElement == null) return;
// remove the current value
clientSection.Settings.Remove(settingElement);
// change the value
settingElement.Value.ValueXml.InnerText = settingValue.ToString();
// add the setting
clientSection.Settings.Add(settingElement);
// save changes
config.Save(ConfigurationSaveMode.Full);
}
Given a .config with the following content:
Server=(local);Database=myDatabase;Integrated Security=true;
You would use it like this:
if (RunningAsAdmin) // save value in main exe's config file
{
SaveUserSettingDefault(@"MyAssembly.Properties.Settings", @"SQLConnectionString", theNewConnectionString);
}
else // save setting in user's config file
{
Settings.Default. SQLConnectionString = theNewConnectionString;
Settings.Default.Save();
}