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

相关推荐
鬼火儿4 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
cr7xin4 小时前
缓存三大问题及解决方案
redis·后端·缓存
间彧5 小时前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧5 小时前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧5 小时前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧5 小时前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧5 小时前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧5 小时前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧5 小时前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang6 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构