当前位置: 代码迷 >> C# >> C# app.config文件配置跟修改
  详细解决方案

C# app.config文件配置跟修改

热度:70   发布时间:2016-05-05 04:28:18.0
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                  else14                      config.AppSettings.Settings.Add(key, value);15                  config.Save(ConfigurationSaveMode.Modified);16                  ConfigurationManager.RefreshSection("appSettings");17                  return true;18              }19              catch20              {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                 else11                   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         /// 设置EndpointAddress20         /// </summary>21         /// <param name="endpointName"></param>22         /// <param name="address"></param>23         public static bool SetEndpointClientAddress(string endpointName, string address)24         {25             try26             {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文件新增节点的操作

 

1楼拿笔小心
lz还是没搞明白什么是vshost.exe,,你的项目属性里,Debug页,如果允许Visual Studio hosting process,你在调试时回自动生成一个xxx.vshost.exe的进程,因此也就会自动生成一个相应的vshost.exe.config文件,是为了对xxx.vshost.exe起作用。,你如果禁止这个选项,就不会有xxx.vshost.exe和vshost.exe.config文件了。,默认情况下这个选项是选取的,目的是为了提高VS调试时的性能,一般情况下我一上来就会把这个选项关掉,以免生成多余的进程和配置文件干扰
Re: 小子哟
@拿笔小心,多谢提醒 新人考虑不全。 https://msdn.microsoft.com/zh-cn/library/ms185331(VS.80).aspx
  相关解决方案