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

相关推荐
㳺三才人子6 小时前
初探 Flask
后端·python·flask·html
星栈独行6 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Java爱好狂.6 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易7 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
装不满的克莱因瓶7 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn
ltl8 小时前
Transformer 原论文实验结果:为什么 28.4 BLEU 足以改写路线图
后端
excel8 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
ZC跨境爬虫8 小时前
模块化烹饪小程序开发日记 Day7:(菜谱详情接口开发与JSON数据读取全流程)
前端·javascript·css·ui·微信小程序·json
卷毛的技术笔记9 小时前
Java后端硬核实战:用Spring AI Alibaba+Redis给LLM装上“超强记忆中枢”
java·人工智能·redis·后端·spring·ai·系统架构
IT_陈寒10 小时前
Java的Optional差点让我掉坑里,这几个坑你别踩
前端·人工智能·后端