架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4758|回复: 2

[ASP.NET] ASP.NET Core(十)Configuration 配置优先级详解

[复制链接]
发表于 2022-3-2 16:15:38 | 显示全部楼层 |阅读模式
ASP.NET Core 项目启动,默认执行顺序为:宿主 Host -> 读取配置 -> 日志设置 -> 注册服务(DI)-> 添加中间件 -> WebHost 监听 -> 后台 Work 启动。

配置的加载和读取是在启动流程的最前面。微软关于 ASP.NET Core 中的配置文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0

回顾:

ASP.NET Core(九) 之 Middleware 中间件详解
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Core 中间件(Middleware)详解
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Core(八) 之 Swagger UI 默认参数的坑
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core(七)深入刨析框架源码
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core(六)DI 手动获取注入对象的方法
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core(五)基于 CAP 分布式事务
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(四)之过滤器统一 ModelState 模型验证
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core(三)使用 ActivatorUtilities 动态创建实例
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core(二)通过代码自重启应用
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core(一)使用 Redis 缓存
https://www.itsvse.com/thread-9393-1-1.html
Host.CreateDefaultBuilder 方法中,按照以下顺序为应用提供默认配置:

  • ChainedConfigurationProvider:添加现有的 作为源。 在默认配置示例中,添加主机配置,并将它设置为应用配置的第一个源。
  • 使用 appsettings.json的 appsettings.json。
  • 使用 JSON 配置提供程序通过 appsettings..json 提供。 例如,appsettings.Production.json 和 appsettings.Development.json。
  • 应用在 环境中运行时的应用机密。
  • 使用环境变量配置提供程序通过环境变量提供。
  • 使用命令行配置提供程序通过命令行参数提供。


源码如下:

源码地址:https://github.com/dotnet/extensions/blob/release/3.1/src/Hosting/Hosting/src/Host.cs

QQ截图20220302152034.jpg

通过代码可以看出,程序获取配置优先级依次为:appsettings.json -> appsettings.环境.json -> 环境变量 -> 命令行参数。我们根据优先级进行测试。

新建一个控制台方法返回所有配置信息,代码如下:


首先,appsettings.json 配置文件,如下:

新建 appsettings.Test.json 配置,如下:

尝试启动项目,查看 WebConfig:Name 和 WebConfig:Date 的配置,如下图:

{"Key":"WebConfig:Name","Value":"itsvse.com"},{"Key":"WebConfig:Date","Value":"2021"}
QQ截图20220302155204.jpg

找到 Properties -> launchSettings.json 文件,修改 ASPNETCORE_ENVIRONMENT 环境配置为 Test,如下:

这时程序会读取 appsettings.Test.json 的配置,尝试重新启动项目,发现 WebConfig:Name 已经覆盖了,如下图:

{"Key":"WebConfig:Name","Value":"itsvse.com test"},{"Key":"WebConfig:Date","Value":"2021"}

QQ截图20220302155541.jpg

再次修改 launchSettings.json 文件,通过环境变量设置 WebConfig:Name 的值,代码如下:

备注:环境变量修改 WebConfig:Name 的值,变量名称为: WebConfig__Name (中间用双下划线隔开

尝试重启项目,发现 WebConfig:Name 的值,已经被环境变量设置的值所覆盖,如下图:

QQ截图20220302160453.jpg

尝试通过命令行的形式修改默认配置的值,启动命令如下:

如下图:

QQ截图20220302161216.jpg

用实践来测试配置键值的优先级,完。





上一篇:【实战】CentOS 7 禁止某 IP 访问服务器
下一篇:【实战】麒麟系统使用 YUM 源安装 OceanBase 错误解决方案
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-3-2 19:59:19 | 显示全部楼层
学习学习了。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-3-29 18:25:09 | 显示全部楼层
Linux 系统配置环境变量

临时设置



永久设置
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-25 13:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表