在C#应用程序开发中,App.config和Web.config是承载程序运行参数的核心配置文件,前者多用于桌面应用、控制台应用,后者多用于ASP.NET Web应用。合理操作这两类配置文件,能够让程序在不重新编译的情况下调整运行参数,提升项目的灵活性和可维护性。

配置文件的基础结构
无论是App.config还是Web.config,本质都是XML格式的文件,核心配置通常存放在<configuration>根节点下的<appSettings>和<connectionStrings>节点中。<appSettings>用于存储自定义键值对配置,<connectionStrings>用于存储数据库连接字符串等配置。
一个基础的App.config文件结构如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ServerIp" value="192.168.0.1"/>
<add key="MaxRetryCount" value="3"/>
</appSettings>
<connectionStrings>
<add name="DefaultDb" connectionString="Server=127.0.0.1;Database=test;Uid=root;Pwd=123456;" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
读取配置文件的常用方法
读取配置文件需要引用System.Configuration命名空间,使用ConfigurationManager类完成操作,该类是.NET框架提供的配置操作核心类。
读取appSettings节点配置
读取<appSettings>下的键值对配置,直接调用ConfigurationManager.AppSettings["键名"]即可,返回值为字符串类型的配置值,如果键不存在则返回null。
示例代码如下:
using System;
using System.Configuration;
namespace ConfigDemo
{
class Program
{
static void Main(string[] args)
{
// 读取ServerIp配置
string serverIp = ConfigurationManager.AppSettings["ServerIp"];
// 读取MaxRetryCount配置,不存在则使用默认值3
string retryCountStr = ConfigurationManager.AppSettings["MaxRetryCount"];
int retryCount = string.IsNullOrEmpty(retryCountStr) ? 3 : int.Parse(retryCountStr);
Console.WriteLine($"服务器地址:{serverIp}");
Console.WriteLine($"最大重试次数:{retryCount}");
}
}
}
读取connectionStrings节点配置
读取数据库连接字符串需要使用ConfigurationManager.ConnectionStrings["连接名"],返回的是ConnectionStringSettings对象,通过它的ConnectionString属性获取具体的连接字符串。
示例代码如下:
using System;
using System.Configuration;
namespace ConfigDemo
{
class Program
{
static void Main(string[] args)
{
// 读取DefaultDb连接字符串
ConnectionStringSettings dbConfig = ConfigurationManager.ConnectionStrings["DefaultDb"];
if (dbConfig != null)
{
string connStr = dbConfig.ConnectionString;
Console.WriteLine($"数据库连接字符串:{connStr}");
}
}
}
}
写入和修改配置文件的技巧
需要注意,ConfigurationManager类本身只支持读取操作,如果需要修改或新增配置,需要通过Configuration对象操作,并且修改后的配置文件会生效,但运行时读取的配置可能不会立即更新,需要根据场景处理。
修改App.config配置
对于控制台或桌面应用,需要获取当前应用的配置文件对象,修改对应节点后调用Save方法保存。
示例代码如下:
using System;
using System.Configuration;
namespace ConfigDemo
{
class Program
{
static void Main(string[] args)
{
// 获取当前应用的配置文件
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// 修改appSettings中的ServerIp配置
if (config.AppSettings.Settings["ServerIp"] != null)
{
config.AppSettings.Settings["ServerIp"].Value = "127.0.0.1";
}
else
{
// 如果配置不存在则新增
config.AppSettings.Settings.Add("ServerIp", "127.0.0.1");
}
// 保存修改并刷新配置
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Console.WriteLine("配置修改完成");
}
}
}
修改Web.config配置
Web应用的操作逻辑类似,但是获取配置的方式略有不同,需要通过WebConfigurationManager类操作,该类位于System.Web.Configuration命名空间下。
示例代码如下:
using System;
using System.Web.Configuration;
namespace WebConfigDemo
{
public partial class ConfigPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 获取当前Web应用的配置文件
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
// 修改appSettings中的配置
if (config.AppSettings.Settings["SiteName"] != null)
{
config.AppSettings.Settings["SiteName"].Value = "测试站点";
}
else
{
config.AppSettings.Settings.Add("SiteName", "测试站点");
}
// 保存修改
config.Save();
// 刷新配置节点
ConfigurationManager.RefreshSection("appSettings");
}
}
}
开发中的实用注意事项
- 读取配置时建议做非空判断,避免配置键不存在导致空引用异常,同时可以给常用配置设置默认值,提升程序健壮性。
- 修改配置文件后,一定要调用
RefreshSection方法刷新对应配置节点,否则运行时可能读取到旧的配置值。 - Web.config修改后会触发应用重启,因此不建议在高频率操作的场景中频繁修改Web.config,避免影响应用稳定性。
- 如果配置中需要存储特殊字符,比如连接字符串中的&符号,需要转义为
&,否则会导致配置文件格式错误。 - 发布程序时,App.config会自动重命名为
程序名.exe.config,不要直接修改源App.config,要修改生成目录下的对应config文件。
常见问题解答
为什么读取配置返回null?
首先检查配置文件的键名是否和代码中一致,其次检查配置文件是否放在程序运行目录,App.config需要生成操作设置为“内容”,复制到输出目录设置为“始终复制”。
修改配置后不生效怎么办?
确认是否调用了RefreshSection方法,另外如果是Web应用,修改后应用重启可能会覆盖部分修改,建议将动态配置存储在数据库或其他持久化介质中。
配置文件的读写操作是C#开发的基础技能,掌握上述方法后,能够应对绝大多数配置相关的开发需求,建议在实际项目中根据场景选择合适的配置存储方式,平衡灵活性和性能。
C#App.configWeb.configConfigurationManager读写配置文件修改时间:2026-06-12 02:06:42