C#应用程序开发过程中,配置文件承担着保存运行参数、数据库连接信息、环境变量等重要职责。合理使用配置文件可以降低代码与环境配置的耦合,提高程序维护效率。C#中常见的配置文件操作主要围绕AppSettings和ConnectionStrings两个配置节点展开,它们分别用于存储普通应用参数和数据库连接字符串。
本文将详细介绍C#配置文件的结构、AppSettings读写方式、ConnectionStrings读取方法、动态修改配置文件的实现方式,以及实际项目中的使用技巧。
C#配置文件基础结构介绍
传统.NET Framework项目通常使用App.config或Web.config作为配置文件,程序运行后会自动转换为对应的配置文件,例如:
-
桌面应用程序:App.config → xxx.exe.config
-
ASP.NET应用程序:Web.config
一个典型配置文件结构如下:
XMLkey="ApiUrl" value="https://api.example.com" /> key="MaxCount" value="100" /> name="DefaultConnection" connectionString="Server=localhost;Database=TestDB;User Id=sa;Password=123456;" providerName="System.Data.SqlClient" />
其中:
-
appSettings用于保存普通键值配置。
-
connectionStrings专门用于数据库连接信息管理。
-
configuration是整个配置文件的根节点。
两者虽然都是保存字符串数据,但设计目的不同,实际开发中应根据用途选择。
AppSettings配置读取方法
AppSettings主要用于保存系统运行参数,例如:
-
接口地址
-
文件路径
-
系统开关
-
默认参数
-
程序版本信息
使用ConfigurationManager读取AppSettings
首先需要引用程序集:
C#using System.Configuration;
读取配置:
C#string apiUrl = ConfigurationManager.AppSettings["ApiUrl"]; Console.WriteLine(apiUrl);
如果配置文件中存在:
XMLkey="ApiUrl" value="https://api.example.com" />
输出结果:
https://api.example.com
这种方式简单直观,也是最常见的AppSettings读取方式。
AppSettings读取多个配置项
实际项目中通常存在多个配置参数,可以封装读取方法:
C#public static string GetAppSetting(string key) { return ConfigurationManager.AppSettings[key]; }
调用:
C#string url = GetAppSetting("ApiUrl"); string count = GetAppSetting("MaxCount");
这样可以统一管理配置访问逻辑,方便后期扩展。
AppSettings配置值类型转换
配置文件中的value本质上都是字符串,例如:
XMLkey="MaxCount" value="100"/>
读取后需要转换:
C#int maxCount = int.Parse( ConfigurationManager.AppSettings["MaxCount"] );
更安全的写法:
C#int maxCount; bool result = int.TryParse( ConfigurationManager.AppSettings["MaxCount"], out maxCount );
避免配置错误导致程序异常。
ConnectionStrings读取数据库连接
数据库连接字符串不建议放入appSettings,而应该使用connectionStrings节点。
配置示例:
XMLname="MyDatabase" connectionString="Server=.;Database=Demo;Integrated Security=True;" providerName="System.Data.SqlClient"/>
读取方式:
C#string conn = ConfigurationManager.ConnectionStrings["MyDatabase"] .ConnectionString;
返回:
Server=.;Database=Demo;Integrated Security=True;
ConnectionStrings与AppSettings区别
虽然两者都可以保存字符串,但用途存在明显区别。
| 对比项 | AppSettings | ConnectionStrings |
|---|---|---|
| 主要用途 | 普通配置参数 | 数据库连接 |
| 节点名称 | appSettings | connectionStrings |
| 访问方式 | AppSettings[key] | ConnectionStrings[name] |
| 安全管理 | 较弱 | 支持加密保护 |
| 典型数据 | 接口地址、路径 | 数据库连接信息 |
实际开发建议:
-
普通业务配置使用AppSettings。
-
数据库相关配置使用ConnectionStrings。
这样可以让项目结构更加清晰。
修改AppSettings配置文件
读取配置比较简单,但很多开发场景需要动态修改配置,例如:
-
修改服务器地址
-
更新程序运行参数
-
保存用户配置
可以通过Configuration对象实现。
示例:
C#Configuration config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ); config.AppSettings.Settings["ApiUrl"].Value = "https://newapi.example.com"; config.Save(); ConfigurationManager.RefreshSection("appSettings");
修改完成后重新加载配置:
C#string url = ConfigurationManager.AppSettings["ApiUrl"];
即可获取新的值。
修改ConnectionStrings连接配置
ConnectionStrings修改方式类似:
C#Configuration config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ); config.ConnectionStrings.ConnectionStrings["MyDatabase"] .ConnectionString = "Server=newserver;Database=NewDB;Integrated Security=True;"; config.Save();
修改后程序下一次读取即可使用新的连接信息。
配置文件加密保护
数据库连接字符串通常包含账号密码,直接明文保存存在安全风险。
.NET提供了配置节加密功能。
加密connectionStrings:
C#Configuration config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ); ConfigurationSection section = config.GetSection("connectionStrings"); section.SectionInformation.ProtectSection( "DataProtectionConfigurationProvider" ); section.SectionInformation.ForceSave = true; config.Save();
加密后配置文件中的连接字符串会变成密文。
解密读取时:
C#string conn = ConfigurationManager.ConnectionStrings["MyDatabase"] .ConnectionString;
程序仍然可以正常访问。
C#配置文件路径问题
很多开发者在修改配置文件时会遇到:
-
修改后没有生效
-
找不到配置文件
-
读取的是旧值
原因通常是程序运行时读取的是生成目录中的配置文件。
例如:
项目:
MyApp └── App.config
编译后:
bin └── Debug └── MyApp.exe.config
程序实际读取的是:
MyApp.exe.config
而不是项目中的App.config。
因此调试时需要注意:
-
修改配置后重新生成项目。
-
检查bin目录中的配置文件。
-
使用RefreshSection刷新缓存。
.NET Core和.NET 5+中的配置方式变化
传统ConfigurationManager主要用于.NET Framework。
.NET Core及.NET 5以后推荐使用IConfiguration体系。
配置文件通常为:
appsettings.json
示例:
JSON{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=test;" }, "AppSettings": { "ApiUrl": "https://api.example.com" } }
读取:
C#var url = configuration["AppSettings:ApiUrl"]; var conn = configuration.GetConnectionString( "DefaultConnection" );
现代.NET项目更加推荐这种方式,因为它支持:
-
多环境配置
-
依赖注入
-
配置热更新
-
云部署场景
配置文件实际开发建议
1. 避免硬编码配置
错误方式:
C#string url = "https://api.example.com";
推荐:
C#string url = ConfigurationManager.AppSettings["ApiUrl"];
方便不同环境切换。
2. 配置项命名规范化
建议:
XMLkey="Service.ApiUrl" value="xxx"/> key="Service.Timeout" value="30"/>
使用模块化命名,便于管理。
3. 对重要配置增加默认值
读取配置时不要直接假设一定存在:
C#string value = ConfigurationManager.AppSettings["Timeout"] ?? "30";
避免配置缺失导致异常。
4. 不在代码中保存敏感信息
例如:
-
数据库密码
-
API密钥
-
Token
应该使用:
-
配置加密
-
环境变量
-
密钥管理服务
提高系统安全性。
常见问题排查
读取配置返回null
可能原因:
-
key名称错误:
XMLkey="ApiUrl" value="xxx"/>
代码:
C#AppSettings["apiurl"]
大小写不一致。
-
配置文件位置错误。
-
配置未复制到输出目录。
修改配置后没有变化
检查:
-
是否调用config.Save()
-
是否刷新配置节
-
是否修改的是运行目录配置文件
ConnectionStrings读取失败
确认:
XML
节点名称正确,并且读取代码:
C#ConfigurationManager.ConnectionStrings["名称"]
中的名称与name属性完全一致。
总结
C#配置文件读写是企业级应用开发中的基础能力。AppSettings适合保存普通业务参数,而ConnectionStrings更适合管理数据库连接信息。通过ConfigurationManager可以方便完成配置读取、修改和加密操作。
对于传统.NET Framework项目,应熟练掌握App.config和Web.config中的配置管理方式;对于.NET Core及更高版本项目,则建议采用appsettings.json结合IConfiguration的现代配置体系。
合理设计配置结构,不仅能够提升代码维护性,还能增强系统部署灵活性和安全性,是C#项目开发中不可忽视的重要实践。