C# (.NET) 应用程序配置:完整指南
配置管理是现代 C# (.NET) 应用程序开发中的关键任务之一。Microsoft.Extensions.Configuration 库提供了一种强大且灵活的机制,用于从各种来源读取设置:JSON 文件、环境变量、命令行参数和机密。在本文中,我们将详细讲解如何使用最佳实践和代码示例在 .NET 应用程序中设置配置。
库的主要功能
- 多种数据源:JSON、XML、INI、环境变量、命令行参数、Azure Key Vault 等。
- 分层结构:通过带冒号的键支持嵌套部分(
Section:Subsection:Key)。 - 绑定到类(Options Pattern):从配置自动填充 POCO 对象。
- 灵活覆盖:最后添加的源具有最高优先级。
- 机密支持:开发环境使用
Secret Manager,生产环境使用安全存储。
安装与引用
要在 .NET 应用程序(控制台、ASP.NET Core、MAUI 等)中使用配置,需要安装 NuGet 包:
dotnet add package Microsoft.Extensions.Configurationdotnet add package Microsoft.Extensions.Configuration.Jsondotnet add package Microsoft.Extensions.Configuration.EnvironmentVariablesdotnet add package Microsoft.Extensions.Configuration.CommandLine在 ASP.NET Core 中,这些包默认已包含。
基本示例:从 appsettings.json 读取
创建 appsettings.json 文件:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning" } }, "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=MyDb;User Id=sa;Password=MyPass;" }, "AppSettings": { "AppName": "MyApp", "Version": "1.0.0", "MaxRetries": 3 }}在控制台应用程序中读取配置的代码:
using Microsoft.Extensions.Configuration;
class Program{ static void Main(string[] args) { // 创建配置 var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .AddCommandLine(args) .Build();
// 读取简单值 string appName = configuration["AppSettings:AppName"]; Console.WriteLine($"App Name: {appName}");
// 读取嵌套部分 string connString = configuration.GetConnectionString("DefaultConnection"); Console.WriteLine($"Connection String: {connString}");
// 读取整数 int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]); Console.WriteLine($"Max Retries: {maxRetries}");
// 获取整个部分 var appSettingsSection = configuration.GetSection("AppSettings"); Console.WriteLine($"Version: {appSettingsSection["Version"]}"); }}Options 模式(绑定到类)
最佳实践是通过 IOptions<T> 使用强类型配置。为此:
- 为配置部分创建一个类:
public class AppSettings{ public string AppName { get; set; } public string Version { get; set; } public int MaxRetries { get; set; }}- 在 DI 容器中注册配置(适用于 ASP.NET Core 或使用
Micros