.NET程序中,经常使用Config文件来配置应用程序中经常使用的值,比如数据库连接字符串。最近项目遇到一个需要配置好多节点在配置文件中的需求。为了使配置节点整洁易维护,在代码调用时也保证获取时比较直观,结合自定义配置文件专门整理了一个配置文件帮助类Demo。此篇文章主要讲述自定义配置文件的使用方法。


常见配置文件使用方法

  • 直接在connectionStrings\appSettings这两个节点中添加add节点配置
    • 这种方式在项目中很常见,使用简单,这里不做介绍
  • 文件操作
    • 很多程序中(自己公司老项目),通过获取指定路径下XML\ini\json\txt等文件,通过IO获取文件内容并对文件进行解析,从而获取程序需要的配置信息(不推荐)

自定义配置文件

在App.Config(web.config)中指定其他配置文件的路径和节点。
在configSections节点下配置section节点,.NET提供自带的类型进行封装。(NameValue键值对、Dictionary字典、SingTag基础结构)。Section节点的name属性是自定义节点的名称,type是接收信息的数据类型。
注意!configSections节点必须为configuration下第一个节点

configSectionsname属性为自定义配置节点的名称,type 为转换的类型

ConfigurationManager.GetSection("name") 方法的参数是自定义配置文件节点的名称

NameValue键值对

配置语法格式:

<?xml version="1.0" encoding="utf-8" ?> <configuration> 	<configSections> 		<!--以NameValueCollection键值对的形式返回配置节点中的信息,type值固定为System.Configuration.NameValueSectionHandler--> 		<section name="NameValueConfigNode" type="System.Configuration.NameValueSectionHandler"/> 	</configSections> 	<!--自定义配置节点--> 	<NameValueConfigNode> 		<add key="Name一" value="Value一" /> 		<add key="Name二" value="Value二" /> 		<add key="Name三" value="Value三" /> 	</NameValueConfigNode>     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />     </startup> </configuration>

调用方法:这里以一个静态属性的方法获取并返回Dictionary格式(后面几种方法也采用这个方式)

/// <summary> /// NameValueCollection /// </summary> public static Dictionary<string, string> NameValueConfigNode {     get     {         NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("NameValueConfigNode");         Dictionary<string, string> result = new Dictionary<string,string>();          foreach (string key in nvc.AllKeys)         {              result.Add(key, nvc[key]);         }         return result;     } }

Dictionary

配置文件语法格式:

<?xml version="1.0" encoding="utf-8" ?> <configuration> 	<configSections> 		<!--以Dictionary字典的形式返回配置节点中的信息,type固定为System.Configuration.DictionarySectionHandler--> 		<section name="DictionaryConfigNode" type="System.Configuration.DictionarySectionHandler"/> 	</configSections> 	<!--自定义配置节点--> 	<DictionaryConfigNode> 		<add key="Key一" value="DictValue一" /> 		<add key="Key二" value="DictValue二" /> 		<add key="Key三" value="DictValue三" /> 	</DictionaryConfigNode>     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />     </startup> </configuration>

调用方法:

/// <summary> /// Dictionary /// </summary> public static Dictionary<string, string> DictionaryConfigNode {     get     {         IDictionary dict = (IDictionary)ConfigurationManager.GetSection("DictionaryConfigNode");         Dictionary<string, string> result = new Dictionary<string, string>();         foreach (string key in dict.Keys)         {             result.Add(key, dict[key].ToString());         }         return result;     } }

SingTag

配置文件语法格式:

<?xml version="1.0" encoding="utf-8" ?> <configuration> 	<configSections> 		<!--基础结构处理 .config 文件中由单个 XML 标记所表示的各配置节点中的值,type固定为System.Configuration.SingleTagSectionHandler--> 		<section name="SingleTagConfigNode" type="System.Configuration.SingleTagSectionHandler" /> 	</configSections> 	<!--自定义配置节点--> 	<!--注意,只能是单个节SingleTagSectionHandler才能处理,无论有多少个属性都能处理--> 	<SingleTagConfigNode PropertyOne="1" PropertyTwo="2" PropertyThree="3" PropertyFour="4" PropertyFive="5" />     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />     </startup> </configuration>

调用方法:

/// <summary> /// SingleTag /// </summary> public static Dictionary<string, string> SingleTagConfigNode {     get     {         Hashtable dict = (Hashtable)ConfigurationManager.GetSection("SingleTagConfigNode");         Dictionary<string, string> result = new Dictionary<string, string>();         foreach (string key in dict.Keys)         {             result.Add(key, dict[key].ToString());         }         return result;     } }

以上程序通过控制台应用程序测试调用效果如下:

C#自定义配置文件方法详解_在线工具

自定义配置文件

以上三种方法,只能读取应用程序的Web.config或者app.config中的配置信息,但是在大多数项目中,业务场景复杂,配置信息更是多到看不过来,所以如果都写在web.config或者app.config中的话,不太美观,也不易维护。

那么有没有一种方法,可以根据需要,配置一个或者多个的config,并且在程序中直接调用使用的方法?(问就是有^_^)

下面举例一种自定义配置文件的写法
配置文件写法:
<configSections>节点下<section>的属性值内容与上面三个方法相同。需要注意的是自定义节点,自定义节点只需要设置configSource属性即可,属性值指向自定义配置文件的路径;
注意:路径必须要写成相对路径。

<?xml version="1.0" encoding="utf-8" ?> <configuration> 	<configSections> 		<!--把MyConfigData节点的数据映射到MyConfigData类中--> 		<section name="MyConfigData" type="ConsoleApplication.ConfigFiles.ConfigFile,ConsoleApplication"/> 	</configSections> 	<!--自定义配置节点,configSource指定自定义配置文件的路径(必须是相对路径)--> 	<MyConfigData configSource="ConfigFiles\Framework.config"/>     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />     </startup> </configuration>

这是自定义的文件内容,

<?xml version="1.0" encoding="utf-8" ?> <MyConfigData> 	<add key="Key一" value="自定义文件一" /> 	<add key="Key二" value="自定义文件二" /> 	<add key="Key三" value="自定义文件三" /> </MyConfigData>

程序中的调用方法与上面的方式一致,这种自定义配置文件的精髓在于,不用将所有配置信息都挤在一个文件中,而是根据项目需要合理的分成多个配置,只需要在web.config或者app.config中指定文件路径即可。其他使用方法没有差别

自定义结构配置文件

以上方法为常用的基本配置文件的使用方法,都是使用C#提供的类型进行获取,配置文件的节点需要按照对应格式设置,C#中还有一种可以自定义配置文件格式的调用方法,Config中科自定义节点的结构,然后在程序中需要自定义一个配置文件的类,用于接收自定义配置文件的内容;
其中使用到的类型:
ConfigurationSection、ConfigurationElementCollection、ConfigurationElement、ConfigurationProperty
上面介绍的几种方法基本上已经足够日常使用,此篇文章不在进行介绍自定义格式的写法,后期会根据个人情况(是否懒惰的情况),可能会补充此部分功能,有兴趣可以去了解一下。

写在最后

以上源代码已经放在Gitee上,可自行下载,
https://gitee.com/yang-yong-666/csharp
该项目还包含其他关于C#的帮助类,并且会持续更新!

热门文章

长沙领养宠物猫在哪里领(长沙领养宠物猫在哪里领养)

摘要: 今天给各位分享长沙领养宠物猫在哪里领的知识,其中也会对长沙领养宠物猫在哪里领养进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、在哪里可以领.

饲料搅拌粉碎机安装图(饲料粉碎搅拌机百科)

摘要: 今天给各位分享饲料搅拌粉碎机安装图的知识,其中也会对饲料粉碎搅拌机百科进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、选配与安装小型饲料加.

新手小白怎么开宠物店(开宠物店的利润和风险)

摘要: 今天给各位分享新手小白怎么开宠物店的知识,其中也会对开宠物店的利润和风险进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、新手怎么开宠物店?.

1月8日更新19M/S,2025年最新高速SSR/Clash/Shadowrocket/V2ray订阅链接免费节点地址分享

这一次的节点更新覆盖了欧洲、美国、新加坡、韩国、加拿大、日本、香港等地区,最高速度可达19 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。

2月9日更新21.1M/S,2025年最新高速Clash/V2ray/Shadowrocket/SSR订阅链接免费节点地址分享

这一次的节点更新覆盖了韩国、欧洲、新加坡、日本、香港、美国、加拿大等地区,最高速度可达21.1 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。

动物医院好评模版(宠物医院的好评怎么写)

摘要: 今天给各位分享动物医院好评模版的知识,其中也会对宠物医院的好评怎么写进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、宠物医院好评怎么写...

并发编程基础底层原理学习_在线工具

进程 进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间互不干扰。同时进程保存着程序每一个时刻运行的状态。进程的两个基本元素是程序代码和与代码关联的数据集。进程执行的任意时刻包含了

如何从AngularJS模板的HTML中调用encodeURIComponent?

要创建一个调用encodeURIComponent的过滤器,以下是HTML- <div ng-app = "app">    &

1月19日更新20.8M/S,2025年最新高速V2ray/Clash/Shadowrocket/SSR订阅链接免费节点地址分享

这一次的节点更新覆盖了韩国、香港、欧洲、日本、美国、新加坡、加拿大等地区,最高速度可达20.8 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。

1月5日更新20.2M/S,2025年最新高速V2ray/SSR/Clash/Shadowrocket订阅链接免费节点地址分享

这一次的节点更新覆盖了日本、香港、欧洲、新加坡、美国、加拿大、韩国等地区,最高速度可达20.2 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。

归纳