环境:
- 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
真实实验结果:


787

被折叠的 条评论
为什么被折叠?



