C# 动态更改app.config文件中的值

C# 动态更改app.config文件中的值,c#,.net,C#,.net,我想在app.config的appSetting部分修改一个值。所以我写了, Console.WriteLine(ConfigurationManager.AppSettings["name"]); Console.Read(); Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings["name"].Val

我想在app.config的appSetting部分修改一个值。所以我写了,

Console.WriteLine(ConfigurationManager.AppSettings["name"]);
Console.Read();
Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);  
config.AppSettings.Settings["name"].Value = "raja";       
config.Save(ConfigurationSaveMode.Modified);  
ConfigurationManager.RefreshSection("appSettings");
Console.WriteLine(ConfigurationManager.AppSettings["name"]);
Console.Read();
执行上述代码后,我验证了app.config“name”元素的值是否已更改。但是没有变化


我的代码有什么问题?或者有其他方法可以做到这一点吗?

它可以工作,只需查看bin/Debug文件夹,您可能正在查看project中的app.config文件。

您必须手动更新app.config文件

// Load the app.config file
XmlDocument xml = new XmlDocument();
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

// Do whatever you need, like modifying the appSettings section

// Save the new setting
xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
然后告诉您的应用程序重新加载您修改的任何部分

ConfigurationManager.RefreshSection("appSettings");

此代码适用于我:

    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    config.AppSettings.Settings["test"].Value = "blah";       
    config.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection("appSettings");
注意:如果使用F5运行,它不会更新解决方案项“app.config”,而是更新bin/文件夹中的“.exe.config”。请尝试:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("configFilePath");
config.AppSettings.Settings.Add("configFilePath", configFilePath);
config.Save(ConfigurationSaveMode.Modified,true);
config.SaveAs(@"C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\ADI2v1.4\ADI2CE2\App.config",ConfigurationSaveMode.Modified, true); 

扩展Adis H的示例,以包括空案例(本例中得到位)


它仅在内存级别中更改。它不是更新物理级别(在文件级别),您不应该这样做。不应修改应用程序级设置(这就是为什么不支持该设置),但应使用用户级设置。请检查此链接。它应该能解决你的问题。注意更新最有可能位于程序文件中的文件时的任何安全问题。在Vista下,您需要提升权限才能写入程序文件中的文件。是的,但我如何在那里检查?在我的情况下,更新前有相同的值吗?哥们,太棒了,T.汉克斯!这是行不通的。在我下次重新运行应用程序之前,它仍然不会显示设置已更改。不确定发生了什么。当我试图安装该路径时,“访问该路径被拒绝”。但当我在VisualStudio中尝试它时,效果很好。你能帮我吗?我看代码中没有明显的差异,所以我认为这其中最重要的部分是更新文件的位置(名称)。这帮了大忙。设置是一个字典,您也可以添加新的键值对。
 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            if (config.AppSettings.Settings["HostName"] != null)
                config.AppSettings.Settings["HostName"].Value = hostName;
            else                
                config.AppSettings.Settings.Add("HostName", hostName);                
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
 XmlReaderSettings _configsettings = new XmlReaderSettings();
 _configsettings.IgnoreComments = true;

 XmlReader _configreader = XmlReader.Create(ConfigFilePath, _configsettings);
 XmlDocument doc_config = new XmlDocument();
 doc_config.Load(_configreader);
 _configreader.Close();

 foreach (XmlNode RootName in doc_config.DocumentElement.ChildNodes)
 {
     if (RootName.LocalName == "appSettings")
     {
         if (RootName.HasChildNodes)
         {
             foreach (XmlNode _child in RootName.ChildNodes)
             {
                 if (_child.Attributes["key"].Value == "HostName")
                 {
                     if (_child.Attributes["value"].Value == "false")
                         _child.Attributes["value"].Value = "true";
                 }
             }
         }
     }
 }
 doc_config.Save(ConfigFilePath);