C# 动态更改app.config文件中的值
我想在app.config的appSetting部分修改一个值。所以我写了,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
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);