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

相关推荐
数研小生19 小时前
构建命令行单词记忆工具:JSON 词库与艾宾浩斯复习算法的完美结合
算法·json
韩立学长20 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
编码者卢布1 天前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
她说..1 天前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
编码者卢布1 天前
【Azure Stream Analytic】用 JavaScript UDF 解决 JSON 字段被转成 Record 的关键点
javascript·json·azure
梦梦代码精1 天前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
李慕婉学姐1 天前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
tb_first1 天前
SSM速通2
java·javascript·后端
一路向北⁢1 天前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(一)
java·spring boot·后端·sse·通信
风象南1 天前
JFR:Spring Boot 应用的性能诊断利器
java·spring boot·后端