C# (.NET) 应用程序配置:库与工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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 的主要优势之一是支持来源链。最后添加的来源具有最高优先级。典型的链:

  1. appsettings.json — 基本设置。
  2. appsettings.{Environment}.json — 特定环境(开发、生产)的设置。
  3. 环境变量 — 用于 CI/CD 和 Docker 的覆盖。
  4. 命令行参数 — 用于启动时的临时覆盖。


链配置示例:

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

推荐