在C#应用程序开发过程中,读取配置文件是获取运行时参数、业务配置信息的核心操作,.NET Framework时代常用的ConfigurationManager和.NET Core及之后版本主推的IConfiguration是两种主流的实现方案,二者在使用方式、适用场景上存在明显区别。

ConfigurationManager的使用方式
ConfigurationManager是.NET Framework内置的配置管理类,主要面向传统的.NET Framework应用程序,比如WinForm、ASP.NET WebForm等项目,它的配置信息通常存储在App.config或者Web.config文件中。
基础使用步骤
首先需要在项目中添加System.Configuration程序集引用,之后就可以直接调用ConfigurationManager的静态方法读取配置。
以下是读取App.config中自定义配置节的示例代码:
using System.Configuration;
namespace ConfigDemo
{
class Program
{
static void Main(string[] args)
{
// 读取appSettings节点下的配置
string dbConnStr = ConfigurationManager.AppSettings["DbConnectionString"];
// 读取connectionStrings节点下的配置
string connStr = ConfigurationManager.ConnectionStrings["DefaultConn"].ConnectionString;
// 读取自定义配置节
var customSection = ConfigurationManager.GetSection("CustomSection") as CustomConfigSection;
}
}
}
对应的App.config文件内容示例如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DbConnectionString" value="Server=.;Database=Test;Uid=sa;Pwd=123456"/>
</appSettings>
<connectionStrings>
<add name="DefaultConn" connectionString="Server=.;Database=Prod;Uid=sa;Pwd=654321"/>
</connectionStrings>
</configuration>
核心特性
- 属于静态类,调用方式简单,不需要依赖注入
- 仅支持XML格式的配置文件,配置结构固定
- 不支持动态配置更新,修改配置文件后需要重启应用程序才能生效
- 仅兼容.NET Framework环境,无法在.NET Core及以上版本中直接使用
IConfiguration的使用方式
IConfiguration是.NET Core引入的配置抽象接口,属于Microsoft.Extensions.Configuration命名空间,支持多种配置源,适用于.NET Core、.NET 5+等所有现代.NET应用,包括ASP.NET Core、控制台程序等。
基础使用步骤
首先需要在项目中安装Microsoft.Extensions.Configuration相关NuGet包,比如Microsoft.Extensions.Configuration.Json用于读取JSON配置文件,之后构建配置对象即可使用。
以下是读取appsettings.json配置的示例代码:
using Microsoft.Extensions.Configuration;
using System;
namespace NetCoreConfigDemo
{
class Program
{
static void Main(string[] args)
{
// 构建配置对象
IConfiguration config = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
// 读取配置
string dbConnStr = config["DbConnectionString"];
string apiUrl = config["ExternalApi:Url"];
// 绑定到强类型对象
var dbConfig = config.GetSection("Database").Get<DatabaseConfig>();
}
}
public class DatabaseConfig
{
public string Host { get; set; }
public int Port { get; set; }
public string User { get; set; }
}
}
对应的appsettings.json文件内容示例如下:
{
"DbConnectionString": "Server=.;Database=Test;Uid=sa;Pwd=123456",
"ExternalApi": {
"Url": "https://api.ipipp.com/test"
},
"Database": {
"Host": "localhost",
"Port": 3306,
"User": "root"
}
}
核心特性
- 支持多种配置源,包括JSON、XML、环境变量、命令行参数、Azure KeyVault等
- 支持配置热更新,设置reloadOnChange为true后,修改配置文件会自动生效
- 支持配置绑定到强类型对象,避免硬编码字符串带来的错误
- 支持依赖注入,在ASP.NET Core中可以直接通过构造函数注入使用
- 兼容所有现代.NET版本,不支持传统的.NET Framework项目
两种方案的核心差异对比
为了更清晰地展示二者的区别,以下从多个维度进行对比:
| 对比维度 | ConfigurationManager | IConfiguration |
|---|---|---|
| 适用框架 | .NET Framework | .NET Core、.NET 5+ |
| 配置源支持 | 仅XML格式的config文件 | JSON、XML、环境变量、命令行等多种源 |
| 配置更新 | 不支持热更新,需重启应用 | 支持热更新 |
| 调用方式 | 静态类直接调用 | 需要构建配置对象,支持依赖注入 |
| 强类型绑定 | 不支持,需手动转换类型 | 原生支持,可绑定到自定义类 |
如何选择适合的读取方案
实际开发中可以根据项目类型和需求选择对应的方案:
- 如果项目是基于.NET Framework开发的传统应用,比如WinForm、旧版ASP.NET项目,直接使用ConfigurationManager即可,无需额外引入依赖
- 如果项目是基于.NET Core、.NET 5及以上的现代应用,优先选择IConfiguration,能够充分利用其多配置源、热更新、强类型绑定等特性
- 如果需要在.NET Framework项目中使用IConfiguration,可以安装对应的兼容包,但会引入较多额外依赖,非必要不建议使用
- 如果项目需要读取环境变量、命令行参数等非文件类配置,必须选择IConfiguration,ConfigurationManager无法支持这类场景
常见问题说明
很多开发者会在.NET Core项目中尝试使用ConfigurationManager,此时需要额外安装System.Configuration.ConfigurationManager NuGet包,但是这种方式并不推荐,因为会失去.NET Core配置体系的诸多优势,仅适合旧项目迁移时的临时过渡方案。
另外在使用IConfiguration读取配置时,如果配置键包含层级,比如ExternalApi:Url,对应的JSON结构中需要有对应的嵌套节点,否则会返回null,这一点和ConfigurationManager的扁平化配置结构有所不同。
C#ConfigurationManagerIConfiguration配置文件读取修改时间:2026-07-12 16:57:30