Asp.net core appsettings.json` 和 `appsettings.Development.json`文件区别
在 ASP.NET Core 中,appsettings.json
和 appsettings.Development.json
是配置文件的分层机制,用于支持不同环境(Environment)下的差异化配置。它们的核心区别在于:后者会覆盖前者中相同名称的配置项,且仅在 Development(开发)环境下生效。
✅ 一、基本概念
1. appsettings.json
- 主配置文件
- 包含所有环境通用的默认配置
- 例如:日志级别、功能开关、通用连接字符串等
{"Logging": {"LogLevel": {"Default": "Information"}},"AllowedHosts": "*","FeatureToggle": {"NewCheckout": false}
}
2. appsettings.Development.json
- 环境特定配置文件
- 仅当应用运行在
Development
环境时加载 - 覆盖
appsettings.json
中同名的配置项 - 通常用于:
- 开启详细日志
- 使用开发数据库
- 启用调试功能
{"Logging": {"LogLevel": {"Default": "Debug", // 覆盖主配置"Microsoft": "Warning"}},"ConnectionStrings": {"Default": "Server=dev-db;Database=MyApp_Dev;..." // 开发专用连接字符串},"FeatureToggle": {"NewCheckout": true // 开发环境开启新功能}
}
🔁 二、配置加载顺序与覆盖规则
ASP.NET Core 默认通过 CreateDefaultBuilder()
按以下顺序加载配置(后加载的覆盖先加载的):
appsettings.json
appsettings.{Environment}.json
← 例如appsettings.Development.json
- 用户机密(仅开发环境)
- 环境变量
- 命令行参数
📌 关键点:
如果appsettings.Development.json
和appsettings.json
都有"Logging:LogLevel:Default"
,
开发环境下以Development.json
的值为准。
🌍 三、环境(Environment)如何确定?
应用的环境由 ASPNETCORE_ENVIRONMENT
环境变量决定:
环境变量值 | 加载的配置文件 |
---|---|
Development | appsettings.json + appsettings.Development.json |
Staging | appsettings.json + appsettings.Staging.json |
Production | appsettings.json + appsettings.Production.json |
未设置 | 默认为 Production |
设置方式示例:
✅ 开发时(Visual Studio / VS Code)
- 默认自动设置为
Development
- 可在
launchSettings.json
中查看/修改:{"profiles": {"MyApp": {"commandName": "Project","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}}} }
✅ 服务器部署(Linux)
export ASPNETCORE_ENVIRONMENT=Production
dotnet MyApp.dll
🛠️ 四、典型使用场景
配置项 | appsettings.json (通用) | appsettings.Development.json (开发专用) |
---|---|---|
日志级别 | "Information" | "Debug" 或 "Trace" |
数据库连接 | 生产数据库 | 本地 SQL Server / SQLite |
外部服务地址 | https://api.prod.example.com | https://localhost:5001 (Mock 服务) |
错误页面 | 用户友好错误页 | 开发者异常详细页(含堆栈) |
缓存时间 | 3600 秒 | 0(禁用缓存,便于调试) |
💡 提示:永远不要在
appsettings.Development.json
中存放生产敏感信息(如生产密钥),因为它通常会被提交到代码仓库。
🔐 五、安全建议
-
敏感配置(如密码、密钥)不要硬编码在 JSON 文件中
- 开发环境:使用 用户机密(Secret Manager)
dotnet user-secrets set "ConnectionStrings:Default" "..."
- 生产环境:使用 环境变量 或 Azure Key Vault / AWS Secrets Manager
- 开发环境:使用 用户机密(Secret Manager)
-
appsettings.Production.json
通常不提交到 Git(通过.gitignore
忽略),而由部署流程注入。
✅ 六、总结
对比项 | appsettings.json | appsettings.Development.json |
---|---|---|
作用 | 通用默认配置 | 开发环境覆盖配置 |
加载条件 | 总是加载 | 仅当 ASPNETCORE_ENVIRONMENT=Development |
优先级 | 低 | 高(会覆盖同名项) |
是否提交到 Git | 是 | 通常是(但不含敏感信息) |
典型内容 | 生产安全的默认值 | 调试友好、详细日志、本地依赖 |
🌟 核心思想:
“通用配置放主文件,环境差异放环境文件” —— 这是 ASP.NET Core 实现“一次构建,多环境部署”的关键实践。
🔗 官方文档:Use multiple environments in ASP.NET Core