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节点

  1. /// <summary>
  2. /// 修改AppSettings中配置
  3. /// </summary>
  4. /// <param name="key">key值</param>
  5. /// <param name="value">相应值</param>
  6. public static bool SetConfigValue(string key, string value)
  7. {
  8. try
  9. {
  10. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  11. if (config.AppSettings.Settings[key] != null)
  12. config.AppSettings.Settings[key].Value = value;
  13. else
  14. config.AppSettings.Settings.Add(key, value);
  15. config.Save(ConfigurationSaveMode.Modified);
  16. ConfigurationManager.RefreshSection("appSettings");
  17. return true;
  18. }
  19. catch
  20. {
  21. return false;
  22. }
  23. }
  24. /// <summary>
  25. /// 获取AppSettings中某一节点值
  26. /// </summary>
  27. /// <param name="key"></param>
  28. public static string GetConfigValue(string key)
  29. {
  30. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  31. if (config.AppSettings.Settings[key] != null)
  32. return config.AppSettings.Settings[key].Value;
  33. else
  34. return string.Empty;
  35. }

ConnectionStrings节点

  1. /// <summary>
  2. /// 获取连接节点值
  3. /// </summary>
  4. /// <param name="key"></param>
  5. /// <returns></returns>
  6. public static string GetConnectionValue(string key)
  7. {
  8. if (ConfigurationManager.ConnectionStrings[key] != null)
  9. return ConfigurationManager.ConnectionStrings[key].ConnectionString;
  10. return string.Empty;
  11. }
  12. public static void UpdateConnectionStringsConfig(string key, string conString)
  13. {
  14. bool isModified = false; //记录该连接串是否已经存在
  15. if (ConfigurationManager.ConnectionStrings[key] != null)
  16. {
  17. isModified = true;
  18. }
  19. //新建一个连接字符串实例
  20. ConnectionStringSettings mySettings = new ConnectionStringSettings(key, conString);
  21. // 打开可执行的配置文件*.exe.config
  22. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  23. // 如果连接串已存在,首先删除它
  24. if (isModified)
  25. {
  26. config.ConnectionStrings.ConnectionStrings.Remove(key);
  27. }
  28. // 将新的连接串添加到配置文件中.
  29. config.ConnectionStrings.ConnectionStrings.Add(mySettings);
  30. // 保存对配置文件所作的更改
  31. config.Save(ConfigurationSaveMode.Modified);
  32. // 强制重新载入配置文件的ConnectionStrings配置节
  33. ConfigurationManager.RefreshSection("connectionStrings");
  34. }

System.ServiceModel节点

  1. /// <summary>
  2. /// 读取EndpointAddress
  3. /// </summary>
  4. /// <param name="endpointName"></param>
  5. /// <returns></returns>
  6. public static string GetEndpointClientAddress(string endpointName)
  7. {
  8. ClientSection clientSection = ConfigurationManager.GetSection("system.serviceModel/client") as ClientSection;
  9. foreach (ChannelEndpointElement item in clientSection.Endpoints)
  10. {
  11. if (item.Name == endpointName)
  12. return item.Address.ToString();
  13. }
  14. return string.Empty;
  15. }
  16. /// <summary>
  17. /// 设置EndpointAddress
  18. /// </summary>
  19. /// <param name="endpointName"></param>
  20. /// <param name="address"></param>
  21. public static bool SetEndpointClientAddress(string endpointName, string address)
  22. {
  23. try
  24. {
  25. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  26. ClientSection clientSection = config.GetSection("system.serviceModel/client") as ClientSection;
  27. foreach (ChannelEndpointElement item in clientSection.Endpoints)
  28. {
  29. if (item.Name != endpointName)
  30. continue;
  31. item.Address = new Uri(address);
  32. break;
  33. }
  34. config.Save(ConfigurationSaveMode.Modified);
  35. ConfigurationManager.RefreshSection("system.serviceModel");
  36. return true;
  37. }
  38. catch (Exception ex)
  39. {
  40. return false;
  41. }
  42. }

对与配置文件的修改有些可能会觉得直接操作config文件对安全性来说代价太高了,这种情况下就需要个人取决一下可以使用将appconfig段放到独立的config文件中,以XML的方式进行修改,并可以避免应用程序重启的问题。
简单的再说一下放到独立文件的操作
app.config文件配置和修改 - 图1
剩下的就是对xml的操作

  1. string ConnectConfigPath = AppData.StartupPath + "\\Config\\DaoConfig.xml";//获取配置文件路径
  2. //向DaoConfig里添加节点
  3. XmlDocument xmlDoc = new XmlDocument();
  4. xmlDoc.Load(ConnectConfigPath);
  5. XmlNode xmldocSelect = xmlDoc.SelectSingleNode("/DaoConfig[1]");
  6. xmldocSelect.RemoveAll();//删除当前节点的所有子节点
  7. //添加test节点
  8. XmlElement Account = xmlDoc.CreateElement("test");
  9. Account.InnerText = "对应的值";
  10. xmldocSelect.AppendChild(Account);
  11. xmlDoc.Save(ConnectConfigPath);

  • 本文作者:GeekPower - Felix Sun
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!