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

相关推荐
mldong34 分钟前
C# 开发者也有自己的轻量工作流引擎了:NuGet 装包,5 分钟跑通一条审批流
后端·c#·.net
爱学堂IT分享3 小时前
鹤翔老师pmp项目管理培训认证考试课 (直播录播题库送学时证明)【共58课时】-51CTO学堂
后端
王的宝库3 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
码事漫谈4 小时前
类型即世界:一个 C++ 程序员的本体论入门
后端
Rain的Java大神之路4 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
IT_陈寒6 小时前
Python的多线程居然是个假把式?搞清GIL让我少熬三天夜
前端·人工智能·后端
明月_清风6 小时前
位图与布隆过滤器:海量数据下的"存在性判断"艺术
前端·后端·算法
明月_清风7 小时前
Hash 表从入门到精通:Go 实战与工程细节
前端·后端·算法
考虑考虑7 小时前
ElasticSearch索引命令
运维·后端·elasticsearch
玉宇夕落8 小时前
背单词项目一:融会贯通:从零构建"单词大师"后台——Next.js + Supabase + Drizzle 全栈开发实战
后端