.net 10 下测试 asp.net core 的配置加载顺序

环境:

  • window11
  • powershell
  • .net 10
  • Microsoft.NET.Sdk.Web
  • donet run file

一、先说结论

下面是针对同一个配置项(ConnectionStrings:esd) asp.net core 下加载的优先级:

  • 命令行:dotnet run app.cs ConnectionStrings:esd="cmdarg"
  • launchSettings.json 中的环境变量配置(最后有个补充实验)
  • 不带前缀的环境变量:$env:ConnectionStrings:esd="direct_env"
  • appsettings.Dev.json中的(已经通过 ASPNETCORE_ENVIRONMENT=Dev 指定)
  • appsettings.json中的
  • DOTNET_ 前缀的环境变量:$env:DOTNET_ConnectionStrings:esd="DOTNET_env"
  • ASPNETCORE_ 前缀的环境变量:$env:ASPNETCORE_ConnectionStrings:esd="ASPNETCORE_env"

二、实验基础

在 powershell 中设置和清除环境变量如下操作:

$env:ASPNETCORE_ENVIRONMENT="Dev"
$env:ASPNETCORE_ENVIRONMENT=$null

ASPNETCORE_ENVIRONMENT: 是决定 asp.net core 程序加载 appsettings.json 还是 appsettings.Dev.json

三、开始实验

3.1 准备

在这里插入图片描述

代码如下,想动手的可拷贝:

#:sdk Microsoft.NET.Sdk.Web

var builder = WebApplication.CreateBuilder(args);
var conn = builder.Configuration["ConnectionStrings:esd"];
Console.WriteLine(conn);

命令如下:

PS D:\test> $env:ConnectionStrings:esd="direct_env"
PS D:\test> $env:DOTNET_ConnectionStrings:esd="DOTNET_env"
PS D:\test> $env:ASPNETCORE_ConnectionStrings:esd="ASPNETCORE_env"
PS D:\test> $env:ASPNETCORE_ENVIRONMENT="Dev"
PS D:\test> Get-ChildItem env:*ConnectionStrings*, env:ASPNETCORE_ENVIRONMENT

Name                           Value                                                                                                                          
----                           -----                                                                                                                          
ASPNETCORE_ConnectionString... ASPNETCORE_env                                                                                                                 
ConnectionStrings:esd          direct_env                                                                                                                     
DOTNET_ConnectionStrings:esd   DOTNET_env                                                                                                                     
ASPNETCORE_ENVIRONMENT         Dev                                                                                                                            


PS D:\test> 

3.2 开始实验

先试试带上命令行参数观察:
在这里插入图片描述

可见:命令行的优先级是最高的

去掉命令行参数后,下面环境变量与appsettings[.env].json同台竞争:
在这里插入图片描述

结果:appsettings[.env].json 没有竞争过不带前缀的环境变量 ConnectionStrings:esd

删除环境不带前缀的环境变量 ConnectionStrings:esd 后:
在这里插入图片描述

结果:排到了 appsettings.dev.json ,盲猜,下一个应该轮到 appsettings.json

删除环境变量 ASPNETCORE_ENVIRONMENT 后:
在这里插入图片描述

结果:没有意外,到了 appsettings.json,下面两个带前缀的环境变量,我们用的不多,可以继续往下看

删除 appsettings.json 文件后:
在这里插入图片描述

结果:环境变量 DOTNET_ 前缀 要优于 ASPNETCORE_ 前缀

再删除 ASPNETCORE_ 前缀 的

在这里插入图片描述

结果:最后到 ASPNETCORE_ 前缀的了

四、补充

一般我们本地开发会有 launchSettings.json文件,如:
在这里插入图片描述
如果他里面也有配置,那么优先级如何呢?

先说结论:
launchSettings.json 里的配置仅次于命令行参数

实验基础:
dotnet run file 模式中,launchSettings.json 要放在 app.cs 同目录下且名字跟随 *.cs文件名固定,这里是 app.run.json

真实实验结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackletter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值