乐于分享
好东西不私藏

C# 读写App.config配置文件的方法

C# 读写App.config配置文件的方法

前言:

在C#中,ConfigurationManager类提供了一种方便的方式来读取和操作应用程序的配置文件。应用程序的配置文件通常位于应用程序的工作目录下,文件名为App.config或Web.config。通过使用ConfigurationManager类,我们可以读取这些文件中的数据,并在应用程序中使用这些数据。
正文:
操作这个文件之前就必须要搞懂app.config、exe.config和vshost.exe.config作用区别
1.app.config

     作为开发时配置参数的文件,可以在vs开发时右键属性设置是否复制到可执行程序同目录下(默认始终不复制)。在不复制的情况下,编译生成可执行程序时会copy该文件为*.exe.config文件和*.vshost.exe.config文件。这样的话,在*/bin/debug/ 或者*/bin/release/目录下就不会有app.config文件了,对应的有exe.config和vshost.exe.config。

以后运行exe文件所操作的配置文件(通过System.Configuration对象,

System.Configuration config= System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));

直接修改的是exe.config文件。

2.*.exe.config

     vs调试编译时,如果app.config文件有修改,则会重新copy覆盖到exe.config和vshost.exe.config文件中,否则exe.config不会改变。exe.config文件为程序实际运行时(直接运行.exe程序)直接操作的配置文件。

3.*.vshost.exe.config

    该文件主要是在vs调试运行时起作用,在调试运行程序时(*vshost.exe -> *.exe)先copy *.exe.config覆盖*.vshost.exe.config,然后运行程序时操作的配置文件为*.vshost.exe.config.在调试程序结束时(*.exe -> *.vshost.exe)

再次copy *.exe.config覆盖*.vshost.exe.config。 所有调试情况下无论怎么修改配置文件,程序退出后都不会修改配置文件(还原了)。

所以在vs调试运行程序时通过配置文件来记录之前的操作无法生效。

App.config配置文件作用:

核心作用:解耦配置与代码,提升程序的可维护性和灵活性

这是 App.config 最根本的作用,也是它存在的核心意义。

无配置文件的问题

如果把数据库连接串、接口地址、超时时间这些参数直接写在代码里(硬编码),会出现两个致命问题:

生产环境需要修改数据库地址时,必须打开 VS 改代码、重新编译、重新发布程序,步骤繁琐且易出错;

配置项分散在各个窗体 / 类中,后期维护时要逐行找代码,效率极低。

有配置文件的优势

所有可变配置集中管理在 App.config 中,修改配置仅需用记事本打开 exe 同目录的 config 文件编辑,保存后重启程序即可生效,全程无需接触代码、无需重新编译,极大降低维护成本。

示例对比:

硬编码(不推荐):string connStr = “Data Source=192.168.1.100;Initial Catalog=TestDB;User ID=sa;Password=123456”;

配置文件(推荐):代码中仅写读取逻辑,连接串存在 App.config,修改时直接改配置文件即可。

常见配置文件模式:

<configuration> 

<configSections>                    //配置节声明区域,包含配置节和命名空间声明

 <section>                              //配置节声明

 <sectionGroup>                    //定义配置节组

 <section>                              //配置节组中的配置节声明

 <appSettings>                      //预定义配置节

 <Custom element for configuration section>   //配置节设置区域

App.config 中 <appSettings>(普通键值对)和<connectionStrings>(连接字符串)是最常用的两个节点,下面讲解读取 (最常用)和修改(运行时动态更新)的实现代码。面是一个最常见的应用程序配置文件的例子,有appSettings和configSections节:

App.config文件配置

<?xml version="1.0" encoding="utf-8"?><configuration><appSettings><addkey="Email"value="admin@admin.com"/><addkey="Password"value="123456"/><addkey="SmtpServer"value="smtp.admin.com"/><addkey="SystemName"value="WinForm配置示例"/><addkey="RequestTimeout"value="5000"/></appSettings><connectionStrings><addname="SqlConn"connectionString="Data Source=.;Initial Catalog=TestDB;User ID=sa;Password=123456;Integrated Security=False"providerName="System.Data.SqlClient"/></connectionStrings></configuration>
public partial class Server : Form{  privatevoidServer_Load(object sender, EventArgs e)    {      LoadAppParam(); //加载      SaveAppParam(); //保存    }    publicvoidLoadAppParam()    {      string str1 = ConfigurationManager.AppSettings["Email"].ToString();      string str2 = ConfigurationManager.AppSettings["Password"].ToString();      string str3 = ConfigurationManager.AppSettings["SmtpServer"].ToString();      string str4 = ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString;    }     publicvoidSaveAppParam()    {      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);      config.AppSettings.Settings["Email"].Value = "admin@admin.com1";      config.AppSettings.Settings["Password"].Value = "12345678";      config.AppSettings.Settings["SmtpServer"].Value = "smtp.admin.com";      config.AppSettings.SectionInformation.ForceSave = true;//保存文件      config.Save(ConfigurationSaveMode.Modified);      //重新加载改变的节点      ConfigurationManager.RefreshSection("appSettings");    } } 
运行以后Client.exe.Config文件的内容被修改了,而配置文件App.config里面的内容没有变化(如果重新生成执行文件Client.exe.Config的值会被App.config覆盖)。
而程序再次读取已经变成Client.exe.Config文件的值了。

PS:本文章属个人学习总结,部分内容参考互联网上的相关文章。 其中如果发现个人总结有不正确的认知或遗漏的地方请评论告知,欢迎交流。

  往  期  回  顾  

C#在UI上使用背景程序组件BackgroundWorker

C#中 Invoke、begininvoke、InvokeRequired的用法

C#中,WinForm启动防止多开处理方法

c# 中Thread、ThreadPool、Task、Parallel、Async和Await的区别和使用

C#各种定时器Timer类应用
C#中的泛型函数(Generic)
C#通过ModbusTCP协议与汇川PLC通信
C#与松下PLC通信
C#与三菱PLC通信
C#通过S7协议与西门子PLC通信
C# 使用 WinForm MDI 模式管理多个子窗体
C# ListView控件
C# TabControl控件
C# TreeView控件
C# DataGridView数据表格开发编辑
C# 数据之间的转换
C#操作Excel
C#操作SQLite数据库
C#操作xml文件(二)
C#操作xml文件(一)
C# 操作SerialPort类
C#操作Access数据库
C#解析JSON数据
C#请求http的实现(GET,POST)
C# 操作.csv 文件CsvHelper类
C#中socket通信(二、客户端编程)
C#中socket通信(一、服务器编程)
C#中 IniHelper类的搭档Param类
C# 操作.ini 文件IniHelper类
委托(Delegate)
C#界面显示消息
自定义静态日志类LogHelper

觉得有收获?不妨分享让更多人受益

关注「DotNET探索求知」,共同提升技术实力

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » C# 读写App.config配置文件的方法

评论 抢沙发

6 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮