下面的仅显示了对appSettings的读和写,自己可以对其进行扩展!下面不仅适用于App.config,也适用于Web.config,不过,对于Web.config的写操作会造出网站的重启!
using System.Reflection;
using System.Configuration;
namespace zyjTools {
public static class ConfigHelper {
#region 扩展方法
/// <summary>
/// 更新Appsetting中的某个key的值
/// </summary>
/// <param name="keyStr">key值</param>
/// <param name="valueStr">value值</param>
/// <param name="refreshType">刷新类型,1,刷新文件缓存中的配置项,2,刷新当前内存中的配置项</param>
private static void UpdateConfig(string keyStr, string valueStr, bool IsRuntime) {
Configuration config;
if (!IsRuntime) {
//设置并刷新文件缓存中的app.config,用于下次程序启动,并不影响当前程序内存中的配置
string assemblyConfigFile = Assembly.GetEntryAssembly().Location;
config = ConfigurationManager.OpenExeConfiguration(assemblyConfigFile);
} else {
//设置并刷新内存(runtime)的app.config,用于当前启动的程序
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
appSettings.Settings.Remove(keyStr);
appSettings.Settings.Add(keyStr, valueStr);
config.Save(ConfigurationSaveMode.Modified);
if (IsRuntime) {
ConfigurationManager.RefreshSection("appSettings");
}
}
private static void UpdateConfig_cache(string keyStr, string valueStr) {
UpdateConfig(keyStr, valueStr, false);
}
private static void UpdateConfig_runtime(string keyStr, string valueStr) {
UpdateConfig(keyStr, valueStr, true);
}
/// <summary>
/// 设置App.config的AppSettings节点下key对应的键值
/// </summary>
/// <param name="key"></param>
public static void SetConfig(string keyStr, string valueStr) {
UpdateConfig_cache(keyStr, valueStr);
UpdateConfig_runtime(keyStr, valueStr);
}
/// <summary>
/// 获取App.config的AppSettings节点下key对应的键值,如果key有多个标签对应,多个值以逗号隔开
/// </summary>
/// <param name="key">键值</param>
/// <returns></returns>
public static string GetConfig(string key) {
string r = ConfigurationManager.AppSettings[key];
return r==null?"":r;
}
#endregion
}
}