How to write to the main exe's .config userSettings section?

前端 未结 2 1004
耶瑟儿~
耶瑟儿~ 2020-12-03 09:17

Is there any supported API in .NET 2.0 for writing to the userSettings section of the main exe\'s .config file?

Th

2条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-03 09:43

    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();
    }
    

提交回复
热议问题