导读:本期聚焦于小伙伴创作的《C#如何读取应用程序的配置文件 ConfigurationManager和IConfiguration怎么选》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何读取应用程序的配置文件 ConfigurationManager和IConfiguration怎么选》有用,将其分享出去将是对创作者最好的鼓励。

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

C#如何读取应用程序的配置文件 ConfigurationManager和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项目

两种方案的核心差异对比

为了更清晰地展示二者的区别,以下从多个维度进行对比:

对比维度ConfigurationManagerIConfiguration
适用框架.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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。