【发布时间】:2012-12-14 00:50:50
【问题描述】:
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 发生吗?谢谢。
【问题讨论】:
-
config.AppSettings.Settings.Add不会自动处理这个?还要确保文件不在 UAC 无法触及的位置(如果适用)。 (例如,应用程序从%ProgramFiles%\YourApp运行,但具有未提升的权限。) -
我正在更改代码尝试一下。是否有一个简单的解决方案可以将 app.config 重新定位到未被 UAC 阻止的地方?例如文件或一些公共文件夹?还是我必须重写我自己的配置 IO 结构,不能再使用 config.AppSettings?
-
出于好奇,如果您使用其他 ConfigurationSaveMode 选项,您的结果如何?
-
另外一件事——如果你在 Visual Studio 中调试,你不会看到你的配置文件被修改——它会修改 exeName.vshost.config 而不是 exeName.config 文件,并在调试完成后重置 .vshost.config 文件。