C# (.NET) 应用程序配置:完整指南
配置是开发现代 C# (.NET) 应用程序的关键方面之一。它允许将程序运行参数与代码分离,使应用程序更加灵活、可移植且安全。本文将详细讲解 Microsoft.Extensions.Configuration 库——这是 .NET Core 和 .NET 5/6/7/8+ 中用于管理配置的主要工具。
为什么需要配置?
与其将连接字符串、URL 或 API 密钥硬编码在代码中,配置允许将这些数据存储在文件(JSON、XML、INI)、环境变量或机密中。这简化了在不同环境(开发、预发布、生产)下的部署,并提高了安全性。
库的主要组件
- IConfiguration — 表示统一设置树的接口。
- IConfigurationBuilder — 构建器,从各种来源收集配置。
- ConfigurationRoot — 根对象,实现
IConfiguration。 - Source Providers — 数据提供程序:JSON、XML、INI、环境变量、命令行、内存、自定义。
安装库
该库包含在 .NET SDK 中,因此大多数项目无需额外安装。但是,要在控制台应用程序中使用 JSON 文件,需要添加包:
dotnet add package Microsoft.Extensions.Configuration.Json基本示例:从 appsettings.json 读取
创建文件 appsettings.json:
{ "AppSettings": { "SiteName": "PythonLib", "Version": "1.0", "Logging": { "Level": "Information", "File": "logs/app.log" } }}现在在控制台应用程序中读取它:
using Microsoft.Extensions.Configuration;
class Program{ static void Main() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfiguration config = builder.Build();
string siteName = config["AppSettings:SiteName"]; string logLevel = config["AppSettings:Logging:Level"];
Console.WriteLine($"Site: {siteName}, Log Level: {logLevel}"); }}使用多个来源
Microsoft.Extensions.Configuration 的主要优势之一是支持来源链。最后添加的来源具有最高优先级。典型的链:
appsettings.json— 基本设置。appsettings.{Environment}.json— 特定环境(开发、生产)的设置。环境变量— 用于 CI/CD 和 Docker 的覆盖。命令行参数— 用于启动时的临时覆盖。
链配置示例:
var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true) .AddEnvironmentVariables() .AddCommandLine(args);使用节和强类型配置
为方便起见,可以将配置节与 POCO 类绑定。定义类:
public class AppSettings{ public string SiteName { get; set; } public string Version { get; set; } public LoggingSettings Logging { get; set; }}
public class LoggingSettings{ public string Level { get; set; } public string File