Asp.net core appsettings.json` 和 `appsettings.Development.json`文件区别

ASP.NET Core 中,appsettings.jsonappsettings.Development.json配置文件的分层机制 ,用于支持不同环境(Environment)下的差异化配置 。它们的核心区别在于:后者会覆盖前者中相同名称的配置项,且仅在 Development(开发)环境下生效


✅ 一、基本概念

1. appsettings.json

  • 主配置文件
  • 包含所有环境通用的默认配置
  • 例如:日志级别、功能开关、通用连接字符串等
json 复制代码
{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "AllowedHosts": "*",
  "FeatureToggle": {
    "NewCheckout": false
  }
}

2. appsettings.Development.json

  • 环境特定配置文件
  • 仅当应用运行在 Development 环境时加载
  • 覆盖 appsettings.json 中同名的配置项
  • 通常用于:
    • 开启详细日志
    • 使用开发数据库
    • 启用调试功能
json 复制代码
{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",        // 覆盖主配置
      "Microsoft": "Warning"
    }
  },
  "ConnectionStrings": {
    "Default": "Server=dev-db;Database=MyApp_Dev;..." // 开发专用连接字符串
  },
  "FeatureToggle": {
    "NewCheckout": true        // 开发环境开启新功能
  }
}

🔁 二、配置加载顺序与覆盖规则

ASP.NET Core 默认通过 CreateDefaultBuilder() 按以下顺序加载配置(后加载的覆盖先加载的):

  1. appsettings.json
  2. appsettings.{Environment}.json ← 例如 appsettings.Development.json
  3. 用户机密(仅开发环境)
  4. 环境变量
  5. 命令行参数

📌 关键点

如果 appsettings.Development.jsonappsettings.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 中查看/修改:

    json 复制代码
    {
      "profiles": {
        "MyApp": {
          "commandName": "Project",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }
      }
    }
✅ 服务器部署(Linux)
bash 复制代码
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)

      bash 复制代码
      dotnet user-secrets set "ConnectionStrings:Default" "..."
    • 生产环境:使用 环境变量Azure Key Vault / AWS Secrets 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

相关推荐
用户21411832636022 小时前
国产化算力实战:手把手教你在魔乐社区用华为昇腾 NPU 跑通模型推理
后端
IT_陈寒2 小时前
SpringBoot性能飞跃:5个关键优化让你的应用吞吐量提升300%
前端·人工智能·后端
M1A12 小时前
你的认知模式,决定了你的人生高度
后端
追逐时光者3 小时前
Everything替代工具,一款基于 .NET 开源免费、高效且用户友好文件搜索工具!
后端·.net
QX_hao3 小时前
【Go】--数据类型
开发语言·后端·golang
桦说编程4 小时前
线程池拒绝策略避坑:谨慎使用抛弃策略,可能导致系统卡死
java·后端
BingoGo4 小时前
PHP 15 个高效开发的小技巧
后端·php
锥栗4 小时前
【Redis】【缓存】理解缓存三大问题:缓存穿透、缓存击穿与缓存雪崩及解决方案
java·后端·面试
9号达人4 小时前
泛型+函数式:让策略模式不再是复制粘贴地狱
java·后端·面试