App.config 标签 标签
- 一句话的事儿:
首先我们有必要了解一下app.config、exe.config和vshost.exe.config作用和区别:
vshost.exe.config是程序运行时的配置文本,exe.config是程序运行后会复制到vshost.exe.config,app.config是在vshost.exe.config和exe.config没有情况起作用,从app.config复制到exe.config再复制到vshost.exe.config。vshost.exe.config和exe.config会自动创建内容跟app.config一样。了解过这些其实写配置文件都是写到exe.config文件中了,app.config不会变化。网上也有许多关于配置文件的读写操作,也是借鉴了多位前辈的经验自己总结的一些比较常用的读写操作。废话不多说,直接上主题:
appSetting节点
/// <summary>/// 修改AppSettings中配置/// </summary>/// <param name="key">key值</param>/// <param name="value">相应值</param>public static bool SetConfigValue(string key, string value){try{Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if (config.AppSettings.Settings[key] != null)config.AppSettings.Settings[key].Value = value;elseconfig.AppSettings.Settings.Add(key, value);config.Save(ConfigurationSaveMode.Modified);ConfigurationManager.RefreshSection("appSettings");return true;}catch{return false;}}/// <summary>/// 获取AppSettings中某一节点值/// </summary>/// <param name="key"></param>public static string GetConfigValue(string key){Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if (config.AppSettings.Settings[key] != null)return config.AppSettings.Settings[key].Value;elsereturn string.Empty;}
ConnectionStrings节点
/// <summary>/// 获取连接节点值/// </summary>/// <param name="key"></param>/// <returns></returns>public static string GetConnectionValue(string key){if (ConfigurationManager.ConnectionStrings[key] != null)return ConfigurationManager.ConnectionStrings[key].ConnectionString;return string.Empty;}public static void UpdateConnectionStringsConfig(string key, string conString){bool isModified = false; //记录该连接串是否已经存在if (ConfigurationManager.ConnectionStrings[key] != null){isModified = true;}//新建一个连接字符串实例ConnectionStringSettings mySettings = new ConnectionStringSettings(key, conString);// 打开可执行的配置文件*.exe.configConfiguration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);// 如果连接串已存在,首先删除它if (isModified){config.ConnectionStrings.ConnectionStrings.Remove(key);}// 将新的连接串添加到配置文件中.config.ConnectionStrings.ConnectionStrings.Add(mySettings);// 保存对配置文件所作的更改config.Save(ConfigurationSaveMode.Modified);// 强制重新载入配置文件的ConnectionStrings配置节ConfigurationManager.RefreshSection("connectionStrings");}
System.ServiceModel节点
/// <summary>/// 读取EndpointAddress/// </summary>/// <param name="endpointName"></param>/// <returns></returns>public static string GetEndpointClientAddress(string endpointName){ClientSection clientSection = ConfigurationManager.GetSection("system.serviceModel/client") as ClientSection;foreach (ChannelEndpointElement item in clientSection.Endpoints){if (item.Name == endpointName)return item.Address.ToString();}return string.Empty;}/// <summary>/// 设置EndpointAddress/// </summary>/// <param name="endpointName"></param>/// <param name="address"></param>public static bool SetEndpointClientAddress(string endpointName, string address){try{Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);ClientSection clientSection = config.GetSection("system.serviceModel/client") as ClientSection;foreach (ChannelEndpointElement item in clientSection.Endpoints){if (item.Name != endpointName)continue;item.Address = new Uri(address);break;}config.Save(ConfigurationSaveMode.Modified);ConfigurationManager.RefreshSection("system.serviceModel");return true;}catch (Exception ex){return false;}}
对与配置文件的修改有些可能会觉得直接操作config文件对安全性来说代价太高了,这种情况下就需要个人取决一下可以使用将appconfig段放到独立的config文件中,以XML的方式进行修改,并可以避免应用程序重启的问题。
简单的再说一下放到独立文件的操作
剩下的就是对xml的操作
string ConnectConfigPath = AppData.StartupPath + "\\Config\\DaoConfig.xml";//获取配置文件路径//向DaoConfig里添加节点XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(ConnectConfigPath);XmlNode xmldocSelect = xmlDoc.SelectSingleNode("/DaoConfig[1]");xmldocSelect.RemoveAll();//删除当前节点的所有子节点//添加test节点XmlElement Account = xmlDoc.CreateElement("test");Account.InnerText = "对应的值";xmldocSelect.AppendChild(Account);xmlDoc.Save(ConnectConfigPath);
- 本文作者:GeekPower - Felix Sun
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
