C#如何读取app.config或appsettings.json配置文件?

来源:安卓APP网作者:韦伯头衔:草根站长
导读:本期聚焦于韦伯创作的《C#如何读取app.config或appsettings.json配置文件?》,敬请观看详情。C#项目里到底该用app.config还是appsettings.json来存放配置?不少人在老项目迁移到.NET Core时都被这个问题卡住过。本文围绕这两类配置文件,详细讲解使用ConfigurationManager读取app.config中appSettings与connectionStrings的完整写法,同时介绍在.NET Core和.NET 5以上项目中通过IConfiguration读取appsettings.json、实现配置绑定、分环境加载以及热更新等常用技巧,并对比两种方式的适用场景与注意事项,帮助你根据项目类型选择合适的配置读取方案,写出结构清晰且易于维护的代码。

配置文件几乎是每个C#项目都绕不开的东西,数据库连接串、接口地址、开关参数,这些经常变动的值总不能硬编码在代码里。传统.NET Framework项目用的是app.config,而.NET Core之后微软主推appsettings.json,两套体系的读取方式完全不同。本文就把这两种方式的完整用法讲清楚,包括配置绑定、分环境加载等进阶技巧,帮你彻底搞定C#读取配置文件这件事。

C#如何读取app.config或appsettings.json配置文件?

一、使用ConfigurationManager读取app.config

app.config是.NET Framework时代的标准配置文件,编译后会输出为「程序名.exe.config」。读取它主要依赖System.Configuration.ConfigurationManager类,这个类位于System.Configuration程序集中,使用前需要先在项目里添加对该程序集的引用。

app.config里最常用的两个节点是<appSettings><connectionStrings>。前者存放键值对形式的自定义配置,后者专门存放数据库连接字符串。下面是一个典型的app.config内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="ApiUrl" value="https://api.ipipp.com/v1"/>
    <add key="RetryCount" value="3"/>
  </appSettings>
  <connectionStrings>
    <add name="DefaultDb"
         connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=True"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

读取代码非常简单,直接调用静态方法即可:

using System.Configuration;

// 读取appSettings节点
string apiUrl = ConfigurationManager.AppSettings["ApiUrl"];
string retry = ConfigurationManager.AppSettings["RetryCount"];
int retryCount = int.Parse(retry);

// 读取connectionStrings节点
string connStr = ConfigurationManager.ConnectionStrings["DefaultDb"].ConnectionString;

需要注意的是,ConfigurationManager.AppSettings返回的是字符串,取不到值时为null而不是抛异常,所以解析成数字前最好做判空处理,或者用int.TryParse来避免格式错误导致崩溃。另外,类库项目(Class Library)里的app.config在运行时并不会被读取,实际生效的是最终可执行项目中的那份配置文件,这是很多人踩过的坑。

如果想在运行时修改并保存配置,可以使用Configuration对象的Save方法,但要注意程序目录可能没有写权限,而且这种方式修改的是exe.config文件,下次启动才会读到新值,一般不推荐在代码里频繁改配置。

二、在.NET Core及更高版本中读取appsettings.json

到了.NET Core时代,配置体系被彻底重做,默认使用JSON格式的appsettings.json,支持嵌套结构、数组、多环境文件覆盖。读取配置的核心接口是Microsoft.Extensions.Configuration.IConfiguration,通常在Program.cs中通过ConfigurationBuilder构建。

一个典型的appsettings.json长这样:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "Api": {
    "Url": "https://api.ipipp.com/v1",
    "Timeout": 30
  },
  "ConnectionStrings": {
    "DefaultDb": "Data Source=.;Initial Catalog=Test;Integrated Security=True"
  }
}

在ASP.NET Core的Program.cs中,WebApplication.CreateBuilder已经自动加载了appsettings.json以及appsettings.Development.json等环境文件,你可以直接通过依赖注入拿到IConfiguration

var builder = WebApplication.CreateBuilder(args);

// 直接用索引器读取,冒号表示层级
string apiUrl = builder.Configuration["Api:Url"];
string connStr = builder.Configuration.GetConnectionString("DefaultDb"];

builder.Services.AddControllers();
var app = builder.Build();
app.Run();

如果是控制台项目,需要手动构建配置。记得先通过NuGet安装Microsoft.Extensions.Configuration.Json包:

using Microsoft.Extensions.Configuration;

var config = new ConfigurationBuilder()
    .SetBasePath(AppContext.BaseDirectory)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

string url = config["Api:Url"];

代码里的reloadOnChange: true是个很实用的参数,它开启配置热更新,文件被修改后无需重启程序就能读到新值,这是app.config做不到的。

三、用Options模式实现强类型配置绑定

直接用字符串索引器读配置虽然方便,但配置项多了以后到处都是魔法字符串,容易写错也不好维护。推荐的做法是定义一个与JSON结构对应的类,然后用Get<T>()扩展方法或Options模式做绑定:

public class ApiSettings
{
    public string Url { get; set; } = string.Empty;
    public int Timeout { get; set; }
}

// 方式一:直接反序列化为对象
ApiSettings api = config.GetSection("Api").Get<ApiSettings>();

// 方式二:注册到依赖注入容器(ASP.NET Core推荐)
builder.Services.Configure<ApiSettings>(builder.Configuration.GetSection("Api"));

注册之后,在Controller或Service的构造函数里注入IOptions<ApiSettings>IOptionsSnapshot<ApiSettings>就能拿到配置对象。两者的区别在于生命周期:IOptions是单例,程序启动后值不再变化;IOptionsSnapshot是作用域级别的,每次请求重新读取,能感知到json文件的热更新。对配置时效性有要求的场景用Snapshot版本更合适。

强类型绑定的另一个好处是可以在类上配合数据注解做校验,比如用[Required]标记必填项,配合ValidateDataAnnotations在启动时就发现配置缺失,避免运行到一半才报错。

四、两种方式如何选择

选择依据其实很简单:看项目的目标框架。.NET Framework的WinForm、WPF、老WebForms项目,老老实实用app.config加ConfigurationManager,生态成熟稳定;.NET Core、.NET 5及以上以及ASP.NET Core项目,直接上appsettings.json加IConfiguration,还能顺带获得环境变量覆盖、命令行参数覆盖、Azure Key Vault集成等能力。

需要提醒两点:一是老的.NET Framework项目如果迁移到新框架,ConfigurationManager在安装System.Configuration.ConfigurationManagerNuGet包后依然可用,但更建议趁机把配置迁移到json体系;二是配置里的敏感信息(连接串、密钥)不要提交到代码仓库,生产环境可以通过环境变量或密钥管理服务注入,json文件里只保留开发环境的占位值。

总结一下,app.config的读取简单直接,一个静态类搞定;appsettings.json体系虽然概念多一些(Builder、IConfiguration、Options),但扩展性和灵活性明显更强,尤其是分环境加载和热更新这两个特性,在实际项目中非常实用。掌握这两套方案,无论接手什么年代的项目,配置读取都不会再成为问题。

C#读取配置文件appsettings.jsonConfigurationManager修改时间:2026-09-15 21:06:36

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