当前位置:  编程技术>.net/c#/asp.net

C#配置文件App.config使用总结

    来源: 互联网  发布时间:2014-08-30

    本文导语:  首先,app.config 配置文件的格式如下:   代码示例:                                     因此,对于配置文件的读取方式如下:(依然由上面的文件举一个简单的例子)   代码示例: static string str = "Data Sour...

首先,app.config 配置文件的格式如下:
 

代码示例:
 
 
 
     
     
     
     
   
 

因此,对于配置文件的读取方式如下:(依然由上面的文件举一个简单的例子)
 

代码示例:
static string str = "Data Source=" + System.Configuration.ConfigurationManager.AppSettings["ServerIP"] + ";Initial Catalog =" + System.Configuration.ConfigurationManager.AppSettings["DataBase"] + "; User ID=" + System.Configuration.ConfigurationManager.AppSettings["user"] + "; Password=" + System.Configuration.ConfigurationManager.AppSettings["password"] ; 

这样,便从配置文件中读取出了所需要的信息,组成了一组用于连接数据库的字符串。
对于修改配置文件,有如下方法修改app.config中的值:
 

代码示例:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["DB_UID"].Value = "demo"; 
config.Save(ConfigurationSaveMode.Full); 

事实证明这种做法是不可行的。虽然程序运行时的值已经被修改。但是打开app.config查看,会看到值仍然没有被改动。如果重启程序,就会使用以前的旧值。用这种方法只可以读取值。不能写入或者修改值。

注意,正确的做法是,把配置文件按照普通的xml文件来进行修改,否则,经常出现的问题就是你所修改的东西其实最后根本没有写入文件!最后还是修改失败!
当作普通的xml文件读取的话,首先就要知道怎么寻找文件的路径。我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.ExecuteablePath+".cofig"的方式来获得,不过更加推荐使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile这句话来直接获取当前程序的配置文件的位置,具体原因,后面再叙述。

这里给出常用的操作函数。
 

代码示例:
using System.Xml; 
//第一个参数是xml文件中的add节点的value,第二个参数是add节点的key 
private void SaveConfig(string ConnenctionString, string strKey) 

   XmlDocument doc = new XmlDocument(); 
   //获得配置文件的全路径 
   string strFileName = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; 
   // string  strFileName= AppDomain.CurrentDomain.BaseDirectory + "\exe.config"; 
   doc.Load(strFileName); 
   //找出名称为“add”的所有元素 
   XmlNodeList nodes = doc.GetElementsByTagName("add"); 
   for (int i = 0; i < nodes.Count; i++) 
   { 
       //获得将当前元素的key属性 
       XmlAttribute att = nodes[i].Attributes["key"]; 
       //根据元素的第一个属性来判断当前的元素是不是目标元素 
       if (att.Value == strKey) 
       { 
           //对目标元素中的第二个属性赋值 
           att = nodes[i].Attributes["value"]; 
           att.Value = ConnenctionString; 
           break; 
       } 
   } 
   //保存上面的修改 
   doc.Save(strFileName); 
   System.Configuration.ConfigurationManager.RefreshSection("appSettings"); 

 

现在回过头还是看上面的这个函数,看它的最后一行,它的作用是什么?
查找msdn文档可以发现微软出于性能考虑,对配置文件App.config采用了缓存策略,因此,尽管上面的函数确实在磁盘文件中修改了节点的值,当时,当用前面的那个函数读取的时候,会依然得到原来的那个值,仿佛没有修改一样!所以,必须使用这么句话,进行一遍刷新,强制要求程序下一次读取的时候,从磁盘文件读取!
好了,现在使用Visual Studio写C#程序的童鞋应该都遇到了一个蛋疼的问题,就是在debug时,明明在程序中修改了配置文件,可是下次重新执行程序的时候,发现程序根本没有发生变化,打开与exe文件相对应的config文件查看,发现文件根本没有变化!!!!明明就是当作xml文件来操作的,怎么会这样?!

其实这就涉及VS的运行机制问题了,细心的童鞋会在exe文件的同目录下,发现有一个与之对应的vshost.exe,以及vshost.exe.config 文件,当打开这里的这个config文件后会发现,在这里面的xml文件的值发生了变化!对滴~VS无论在Debug还是Release下,运行的程序都是这个带有vshost的程序,修改的也是这个程序对应的config。当时,当程序刚刚启动的时候,却是读取的原来与exe文件对应的config文件,将这个config文件内容替换原来与vshost.exe对应的config里面内容,这也就是为什么每次重新开程序后恢复原状的原因。

由于程序在VS里面调试的时候,运行的程序与直接去bin文件夹运行的程序不一样,所以,更推荐使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile来获取当前运行程序的配置文件。

当然啦,这一点差异不要着急,等程序调试完毕后,以后,程序一般就是从文件夹手动启动的啦,这个时候,就没有上面的那么多问题的了。一切会恢复正常!


    
 
 

您可能感兴趣的文章:

  • C# 读取配置文件(指定路径)的方法
  • C# 读取指定路径配置文件的方法
  • c# 连接access数据库config配置
  • C#访问应用程序配置文件的方法
  • C# Winform 操作 INI 配置文件的实现代码
  • c# Winform 操作INI配置文件的代码
  • C# Winform 调用系统接口操作 INI 配置文件的代码
  • c#系统环境变量的配置方法
  • 配置C#的系统环境变量的方法
  • c# 开源数据源连接mysql的配置方法
  • C# WinForm开发中使用XML配置文件实例
  • C# 伪静态 URL重写配置一例
  • C#读写xml配置文件(LINQ操作实例)
  • C#中读取App.config配置文件代码实例
  • apache .htaccess文件详解和配置技巧总结 iis7站长之家
  • c#读写ini格式配置文件的实现代码
  • c#读写ini配置文件的例子
  • c#(asp.net)线程配置总结
  • c# api读写ini配置文件的类
  • C#读取XML配置文件的例子
  • AIX常用配置文件总结-请补充
  • apache .htaccess文件详解和配置技巧总结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 get_allocator():返回配置器
  • LINUX如何配置网卡,配置TELNET,急!在线等待!
  • C++ MultiMaps 成员 get_allocator():返回multimap的配置器
  • liunx下配置axis2的环境变量怎么配置
  • C++ Lists(链表) 成员 get_allocator():返回list的配置器
  • centos配置JAVA运行环境在配置JK时出错
  • C++ Maps 成员 get_allocator():返回map的配置器
  • 求xmanager3.0 配置root用户,连接redhat linux 6.0 配置文档
  • C++ Double Ended Queues(双向队列) 成员 get_allocator():返回双向队列的配置器
  • 高分求救!!!怎样在linux下配置tomcat文件?同时配置sqlServer数据库?
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • EJB配置好了,下次启动weblogic的时候还需要重新配置吗
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 高手赐教!Tomcat4.02的配置,不知javaBean目录、servlet目录该如何配置?
  • kohana介绍及安装配置方法
  • 请问JDBC 需要配置吗?如要,如何配置??来者送分!!!
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 请问该如何配置GTK的字体配置文件??
  • centos6网络配置及网卡设置相关命令及配置文件
  • 何处有 Linux 内核编译配置详细的中文介绍? 我在重新配置编译时老是出错:-(
  • Linux内核中影响tcp三次握手的一些协议配置
  • 安装linux的最低配置:硬盘,内存,以及cpu的最低配置?多谢赐教!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3