• C# app.config文件配置和修改


        很多时候我们需要对系统的.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不会变化。网上也有许多关于配置文件的读写操作,也是借鉴了多位前辈的经验自己总结的一些比较常用的读写操作。废话不多说,直接上主题:

    1. 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          }
      修改或新增AppSetting节点
       1         /// <summary>
       2         /// 获取AppSettings中某一节点值
       3         /// </summary>
       4         /// <param name="key"></param>
       5         public static string GetConfigValue(string key)
       6         {
       7                 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
       8                 if (config.AppSettings.Settings[key] != null)
       9                      return  config.AppSettings.Settings[key].Value;
      10                 else
      11                   
      12                 return string.Empty;
      13         }    
      获取AppSetting节点值
    2. 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         }    
      获取ConnectionStrings节点值  
       
       1  public static void UpdateConnectionStringsConfig(string key, string conString)
       2         {
       3             bool isModified = false;    //记录该连接串是否已经存在 
       4             if (ConfigurationManager.ConnectionStrings[key] != null)
       5             {
       6                 isModified = true;
       7             }
       8             //新建一个连接字符串实例 
       9             ConnectionStringSettings mySettings = new ConnectionStringSettings(key, conString);
      10 
      11             // 打开可执行的配置文件*.exe.config 
      12             Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      13 
      14             // 如果连接串已存在,首先删除它 
      15             if (isModified)
      16             {
      17                 config.ConnectionStrings.ConnectionStrings.Remove(key);
      18             }
      19             // 将新的连接串添加到配置文件中. 
      20             config.ConnectionStrings.ConnectionStrings.Add(mySettings);
      21             // 保存对配置文件所作的更改 
      22             config.Save(ConfigurationSaveMode.Modified);
      23             // 强制重新载入配置文件的ConnectionStrings配置节  
      24             ConfigurationManager.RefreshSection("connectionStrings");
      25         }
      修改或新增ConnectionStrings节点
    3. 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 
      17 
      18         /// <summary>
      19         /// 设置EndpointAddress
      20         /// </summary>
      21         /// <param name="endpointName"></param>
      22         /// <param name="address"></param>
      23         public static bool SetEndpointClientAddress(string endpointName, string address)
      24         {
      25             try
      26             {
      27                 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      28                 ClientSection clientSection = config.GetSection("system.serviceModel/client") as ClientSection;
      29                 foreach (ChannelEndpointElement item in clientSection.Endpoints)
      30                 {
      31                     if (item.Name != endpointName)
      32                         continue;
      33                     item.Address = new Uri(address);
      34                     break;
      35                 }
      36                 config.Save(ConfigurationSaveMode.Modified);
      37                 ConfigurationManager.RefreshSection("system.serviceModel");
      38                 return true;
      39             }
      40             catch (Exception ex)
      41             {
      42                 return false;
      43             }
      44 
      45         }
      客户端Client的Endpoint
       
      服务端Service的Address
       

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

         简单的再说一下放到独立文件的操作

          

         剩下的就是对xml的操作

          

          
     1              string ConnectConfigPath = AppData.StartupPath + "\Config\DaoConfig.xml";//获取配置文件路径
     2 
     3                 //向DaoConfig里添加节点
     4                 XmlDocument xmlDoc = new XmlDocument();
     5                 xmlDoc.Load(ConnectConfigPath);
     6                 XmlNode xmldocSelect = xmlDoc.SelectSingleNode("/DaoConfig[1]");
     7 
     8                 xmldocSelect.RemoveAll();//删除当前节点的所有子节点
     9 
    10                 //添加test节点
    11                 XmlElement Account = xmlDoc.CreateElement("test");
    12                 Account.InnerText = "对应的值";
    13                 xmldocSelect.AppendChild(Account);
    14 
    15 
    16                 xmlDoc.Save(ConnectConfigPath);    
    Dao.config文件新增节点的操作
  • 相关阅读:
    Iframe和Frame中实现cookie跨域的方法(转载)
    android中拷贝assets下的资源文件到SD卡中(可以超过1M)
    OpenSL ES 查询设备支持的SL Profiles
    NDK开发中的一个HTTP下载实例附带下载进度
    android中配置文件property的用途以及使用<转>
    Eclipse 工程使用相对路径导入Jar包设置
    Android 解压zip文件(支持中文)
    c++实现一个比较两个string类型的版本号的小demo
    linux c++下载http文件并显示进度<转>
    Linux下类似windows下_beginthread和_endthread 的多线程开发
  • 原文地址:https://www.cnblogs.com/xiaoziyo/p/4364073.html
Copyright © 2020-2023  润新知