它适用于Read
,但似乎无法让Write
发生。当我尝试写文件时,它不会抛出任何IO异常。好像什么也没发生。
以下是我的代码,请查看GetValue()
和SetValue()
函数:
using System.Configuration;
public class AppConfig {
private string _username;
private string _password;
public AppConfig() {
_filePath = GetValue("Username");
_password = GetValue("Password");
//... more
}
public string Password {
get { return _password; }
set { SetValue("Password", value); _password = value; }
}
public string Username {
get { return _username; }
set { SetValue("Username", value); _username = value; }
}
private void SetValue(string key, string val) {
var cfg= ConfigurationManager
.OpenExeConfiguration(ConfigurationUserLevel.None);
cfg.AppSettings.Settings[key].Value = val;
cfg.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
private string GetValue(string key) {
return ConfigurationManager.AppSettings[key];
}
}
这是app.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key ="Password" value ="123456"/>
<add key ="Username" value ="hohoho"/>
</appSettings>
</configuration>
知道如何让Write
发生?谢谢。
答案 0 :(得分:2)
.Net中的配置系统并非旨在让您以编程方式保存对程序集文件夹中app.config的更改。我知道那里有一个“保存”方法,但这些更改实际上保存到配置文件的副本。副本的位置取决于设置的范围。
应用程序设置,例如:
<appSettings>
<add key="" value=""/>
</appSettings>
如果我没记错的话,有“应用范围”。如果使用项目设置页面中的“设置”页面或在“属性”文件夹中打开Settings.settings
,则可以选择范围(用户或应用程序)。
这样,对于当前用户或该特定应用程序版本,将保留对设置的更改。这些副本存储在相应帐户的%APPDATA%中的某个生成文件夹中。配置系统会根据登录的人自动重新加载设置。
这就是为什么你也有一个“升级”方法。它允许您将设置添加到应用程序的新版本并升级用户的设置,从而仅将新属性添加到用户的副本中。这样,程序集文件夹中app.config中的设置只是设置的默认值。
上面的评论触及了为什么它的工作方式:程序文件中的文件在安装后保持不变,UAC确保这一点。
我建议阅读配置系统,它非常强大。如果你真的想要修改app.config,你必须编写自定义代码来直接修改app.config文件和
答案 1 :(得分:0)
尝试以下代码
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings[key].Value = value;
config.Save();
ConfigurationManager.RefreshSection("appSettings");