C# applicationSettings: how to update app.config?

后端 未结 4 942
滥情空心
滥情空心 2020-12-10 19:13

I am using .NET 4.0 and I would like to use the app.config file to store same parameter settings. I do the following. I use the Settings tab in the

相关标签:
4条回答
  • 2020-12-10 19:23

    Here's my function to update or add an entry into the app.config for "applicationSettings" section. There might be a better way, but this works for me. If anyone can suggest a better method please share it, we'll always looking for something better.

        static string APPNODE = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Properties.Settings";
        static DateTime now = DateTime.Now;
        Utilities.UpdateConfig(APPNODE, "lastQueryTime", now.ToString());
    
        static public void UpdateConfig(string section, string key, string value)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
            ClientSettingsSection applicationSettingsSection = (ClientSettingsSection)config.SectionGroups["applicationSettings"].Sections[section];
            SettingElement element = applicationSettingsSection.Settings.Get(key);
    
            if (null != element)
            {
                applicationSettingsSection.Settings.Remove(element);
                element.Value.ValueXml.InnerXml = value;
                applicationSettingsSection.Settings.Add(element);
            }
            else
            {
                element = new SettingElement(key, SettingsSerializeAs.String);
                element.Value = new SettingValueElement();
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                element.Value.ValueXml = doc.CreateElement("value");
    
                element.Value.ValueXml.InnerXml = value;
                applicationSettingsSection.Settings.Add(element);
            }
    
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("applicationSettings");            
        }
    
    0 讨论(0)
  • 2020-12-10 19:29

    Well, I read the link of Hari Gillala, in which one user suggested to edit directly the app.config file, that is a xml file.

    So in project properties-->settings I create the parameters that I need. Then, to load a parameter in code I do the following:

    _myViewModelProperty = MyApp.Properties.Settings.Default.MyParam1;
    

    In this way, I can read easily the information of the config parameter. Is typed, so in disign time I can see if the asign is correct or not.

    To update de config file, I edit the app.config file with the xml libraries of .NET.

        System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
        xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        System.Xml.XmlNode node;
        node = xml.SelectSingleNode("configuration/applicationSettings/MyApp.Properties.Settings/setting[@name='myparam1']");
        node.ChildNodes[0].InnerText = myNewValue;
        xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
    

    In this way, I create a xml document (xml variable) and load the information of the app.config file. Then, I search for the node that I want to update, update its information (InnerText property) and finally I save the changes.

    In this way, I can update the app.config. It is what I want, because in a portable application, only one user will use it, and I want that the configuration is applied in any computer in which I run the application.

    0 讨论(0)
  • 2020-12-10 19:35

    Mark your setting as usersetting.

    Detailed article: http://www.codeproject.com/Articles/25829/User-Settings-Applied

    0 讨论(0)
  • 2020-12-10 19:39

    You should use Properties.Settings to perform this action. You can look at this documentation for more information.

    //modify
    Properties.Settings.Default.param1 = false;
    //save the setting
    Properties.Settings.Default.Save();
    

    Note that if your settings have the Scope of User, which they must be to be writeable, then the properties are saved somewhere else and not in your local config file. See here for the details.

    EDIT after discussion in comment and further searches:

    My suggestion to achieve the desired result would be to switch to AppSettings. That is because, after some searches, i found out that appsettings changes the .config file in the Application Data folder (running some tests on my machine confirm that).

    Look at comment in the answer to this question .

    I am not sure if there is some work around, but if you want your application to have a portable app.config file, i think the only way is to switch to AppSettings which i'm sure can save changes in the app.config found in the program folder.

    EDIT 2: Possible solution

    I found out a possible solution to make your app portable! You can change the Provider used by Settings to save the application's settings creating a custom Provider.

    The answer to this question provide a link to a code to make applicationsettings portable. I think you give it a try

    0 讨论(0)
提交回复
热议问题