zoukankan      html  css  js  c++  java
  • C# 读写App.config配置文件的方法

    我们经常会希望在程序中写入一些配置信息,例如版本号,以及数据库的连接字符串等。你可能知道在WinForm应用程序中可以利用Properties.Settings来进行类似的工作,但这些其实都利用了App.config配置文件。

    本文探讨用代码的方式访问 App.config 的方法。关于 App.config 的使用远比上面提到的用途复杂,因此仅讨论最基本的 appSettings 配置节。

    一、配置文件概述:

    应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。

    它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。

    配置文件的根节点是configuration。我们经常访问的是appSettings,它是由.Net预定义的配置节。我们经常使用的配置文件的架构是客诉下面的形式。

    先大概有个印象,通过后面的实例会有一个比较清楚的认识。下面的“配置节”可以理解为进行配置一个XML的节点。

    <configuration>
    <configSections>//配置节声明区域,包含配置节和命名空间声明
    <section>//配置节声明
    <sectionGroup>//定义配置节组
    <section> //配置节组中的配置节声明
    <appSettings>//预定义配置节
    <Custom element for configuration section>//配置节设置区域

    下面是一个最常见的应用程序配置文件的例子,只有appSettings节:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <appSettings>
        <add key="connectionstring" value="User Source=.;Password=;InitialCatalog=test;Provider=SQLOLEDB.1;" />
        <add key="TemplatePATH" value="Template" />
      </appSettings>
    </configuration>

    在预定义的 appSettings 节(注意大小写),有很多的元素,这些元素名称都是“add”,有两个属性分别是“key”和“value”。

    .NET 提供了对appSettings节的访问方法。在 .NET 1.0 和 1.1 版本中,可以使用 System.Configuration.ConfigurationSettings.AppSettings["Key"] 来对 key = "Key" 的<add>元素的 value属性 进行访问。

    注意:现在.Net FrameWork 2.0中已经明确表示此ConfigurationSettings属性已经废弃,建议改为 ConfigurationManager 或 WebConfigurationManager。

    使用 System.Configuration.ConfigurationManager,需要在工程里添加对 system.configuration.dll 程序集的引用。(在解决方案管理器中右键点击工程名称,在右键菜单中选择添加引用,在.NET选项卡下即可找到。)

    添加引用后,就可以用 ConfigurationManager.AppSettings["Key"] 来读取对应的值了。

    但是,ConfigurationManager.AppSettings 属性是只读的,并不支持修改属性值。这是因为据说微软不太建议我们动态写入app.config文件,而是建议手工配置后,在程序运行时只做静态访问。

    如果实在需要在程序中进行修改,也即写入App.Config,请往下看。

    二、appSettings配置节的读写操作

    读取App.config文件的appSettings节的方法比较简单,可以通过上文中 System.Configuration.ConfigurationManager.AppSettings["Key"]的方法进行访问,但前面也已经说了,该方法不提供写入。

    如果希望写入配置文件,可以使用ConfigurationManager对象执行打开配置文件的操作后,将会返回一个Configuration的对象,利用该对象进行操作(增删改查都可以哦)。

    下面给出实现的代码(增加引用using System.Configuration名称空间)

    private void AccessAppSettings()
    {
      //获取Configuration对象
      Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      //根据Key读取<add>元素的Value
      string name = config.AppSettings.Settings["name"].Value;
      //写入<add>元素的Value
      config.AppSettings.Settings["name"].Value = "zcl";
      //增加<add>元素
      config.AppSettings.Settings.Add("Name", "Config");
      //删除<add>元素
      config.AppSettings.Settings.Remove("name");
      //一定要记得保存,写不带参数的config.Save()也可以
      config.Save(ConfigurationSaveMode.Modified);
      //刷新,否则程序读取的还是之前的值(可能已装入内存)
      System.Configuration.ConfigurationManager.RefreshSection("appSettings");
    }

    需要注意的是:

    1、根据并不存在的Key值访问<add>元素,甚至使用remove()方法删除不存在的元素,都不会导致异常,前者会返回null。

    2、add已经存在的<add>元素也不会导致异常,而是concat了已有的Value和新的Value,用","分隔,例如:"olldvalue,newvalue"。

    3、在项目进行编译后,在运行目录binDebuge文件下,将出现两个配置文件,一个名为“ProjectName.EXE.config”,另一个名为“ProjectName.vshost.exe.config”。第一个文件为项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;第二个文件其实为原代码中“App.config”的同步文件,在程序运行中不会发生更改。

    4、特别注意大小写(XML文件是区分大小写的),例如appSettings配置节。

  • 相关阅读:
    LeetCode OJ 112. Path Sum
    LeetCode OJ 226. Invert Binary Tree
    LeetCode OJ 100. Same Tree
    LeetCode OJ 104. Maximum Depth of Binary Tree
    LeetCode OJ 111. Minimum Depth of Binary Tree
    LeetCode OJ 110. Balanced Binary Tree
    apache-jmeter-3.1的简单压力测试使用方法(下载和安装)
    JMeter入门教程
    CentOS6(CentOS7)设置静态IP 并且 能够上网
    分享好文:分享我在阿里8年,是如何一步一步走向架构师的
  • 原文地址:https://www.cnblogs.com/SuperMetalMax/p/6197012.html
Copyright © 2011-2022 走看看