C#自定义配置文件

.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下第一个节点

configSections的name属性为自定义配置节点的名称,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;
}
}

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

自定义配置文件

以上三种方法,只能读取应用程序的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#的帮助类,并且会持续更新!


个人交流QQ:1695690324

原创不易,转载请注明出处

博客园:https://www.cnblogs.com/yangyongdashen-S/

CSDN:https://blog.csdn.net/weixin_44312699?spm=1010.2135.3001.5343

Gitee:https://gitee.com/yang-yong-666

公众号:yi人夕岸

C#自定义配置文件(一)的更多相关文章

  1. thinkphp3.2自定义配置文件

    扩展配置可以支持自动加载额外的自定义配置文件,并且配置格式和项目配置一样. 设置扩展配置的方式如下(多个文件用逗号分隔): // 加载扩展配置文件 'LOAD_EXT_CONFIG' => 'u ...

  2. beego里面自定义配置文件

    beego编译好的exe通过全路径调用会crash,看了半天,发现是解析不到配置文件,研究了下 发现beego自定义配置文件以后,需要手工parse,我表示,以为是自动化的,没想到是半自动化的…… 追 ...

  3. Springboot读取配置文件及自定义配置文件

    1.创建maven工程,在pom文件中添加依赖 <parent> <groupId>org.springframework.boot</groupId> <a ...

  4. springboot读取自定义配置文件节点

    今天和大家分享的是自定义配置信息的读取:近期有写博客这样的计划,分别交叉来写springboot方面和springcloud方面的文章,因为springboot预计的篇章很多,这样cloud的文章就需 ...

  5. SpringBoot之加载自定义配置文件

    SpringBoot默认加载配置文件名为:application.properties和application.yml,如果需要使用自定义的配置文件,则通过@PropertySource注解指定. J ...

  6. Spring Boot2.0自定义配置文件使用

    声明: spring boot 1.5 以后,ConfigurationProperties取消locations属性,因此采用PropertySource注解配合使用 根据Spring Boot2. ...

  7. MySQL 5.6容器使用自定义配置文件的权限问题

    提出问题: 在使用Rancher2.0.2部署一个mysql deployment时,我们会发现,如果只设置/var/lib/mysql数据目录时,mysql容器(pod)能够正常启动,一旦数据目录和 ...

  8. C# 自定义配置文件

    配置文件有两种设置方式,第一种是直接在网站根目录下的web.config中设置:第二种方式是自定义配置文件,在web.config中指定其他配置文件的路径. 第一种:除了在常用的appSettings ...

  9. Springboot 之 自定义配置文件及读取配置文件

    本文章来自[知识林] 读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两 ...

  10. Springboot 之 自定义配置文件及读取配置文件注意:配置文件中的字符串不要有下划线 .配置中 key不能带下划线,value可以(下划线的坑,坑了我两天..特此纪念)

    注意:配置文件中的字符串不要有下划线 .配置中  key不能带下划线,value可以 错误的.不能读取的例子: mySet .ABAP_AS_POOLED      =  ABAP_AS_WITH_P ...

随机推荐

  1. Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?

    (1)不可中断状态:进程处于睡眠状态,但是此刻进程是不可中断的.不可中断,指进程不响应异步信号. (2)暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响应该信号 而进入 TASK_ ...

  2. 发现程序美----while+for冒泡实现的

    思想记录: 每一轮回的冒泡都将产生一个最大值,其后每次循环次数都将少一次,因为每次都会确定一个最大值. private void method(){ int[] list = {10,7,8,4,7, ...

  3. Java 中怎么获取一份线程 dump 文件?

    在 Linux 下,你可以通过命令 kill -3 PID (Java 进程的进程 ID)来获取 Java 应用的 dump 文件.在 Windows 下,你可以按下 Ctrl + Break 来获取 ...

  4. Windows10安装PHP7+Apache 2.4

    下载下面的文件 httpd-2.4.39-win64-VC15.zip php-7.3.4-Win32-VC15-x64.zip 如果下载失效,从这里下载 https://windows.php.ne ...

  5. 相对路径在IEAD中的位置

    相对路径在IEAD中的位置 工具栏-->Run -->Edit Configurations -->Working directory-->就是了 这里是直接到软件的地址:剩下 ...

  6. python学习笔记(九)——线程与进程

    一.线程 Python 中为我们提供了两个模块来创建线程. _thread threading thread 模块已被废弃.用户可以使用 threading 模块代替.所以,在 Python 中不能再 ...

  7. Java/C++实现观察者模式--股票价格

    当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场. 类图: Java代码: public class Investor implemen ...

  8. Photoshop之用“色彩范围”命令抠像

    1. 打开一个文件.执行"选择>色彩范围",勾选"本地化颜色族",然后在任务背景上单击取样. 2. 取好样以后点击确定,图片如下所示,执行"选择 ...

  9. 从零搭建react开发环境

    早在六年前,前端开发已经实现了模块化.工程化开发,既然是模块化工程化开发那就少不了包管理工具,所以我们的第一步就是先从安装nodejs开始(安装nodejs携带JavaScript的包管理工具npm) ...

  10. 文件上传——IIS6.0解析漏洞

    介绍 IIS6.0漏洞可分为目录漏洞和文件漏洞 目录漏洞 访问*.asp格式命令的文件夹下的文件,都会被当成asp文件执行 文件漏洞 畸形文件命名 123.asp -> 123.asp;.txt ...