但是是什么“链接”了这些设置,以便在应用程序发布时它们将替代 appsettings.json?
appsettings 是由 Program.cs
中的 WebHost
配置的。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
在实现
webhost.cs时,框架会将appsettings添加到webhost中。
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
第二行是将特定于环境的
appsettings
添加到代码中。在Visual Studio中,此环境变量定义在
项目设置 -> 调试
页面中,称为
ASPNETCORE_ENVIRONMENT
。默认情况下,它设置为
Development
,因此当您在Visual Studio内构建和运行时,将加载
appsettings.development.json
文件(如果存在),并覆盖
appsettings.json
文件中的任何匹配设置。
当您发布应用程序时,可以使用同名的操作系统环境变量覆盖此值。.NET Core从哪里读取值,并采用“后一个胜出”的策略。
目前的层次结构如下:
1. 文件(appsettings.json、appsettings.{Environment}.json,其中{Environment}是应用程序当前托管环境)
2. Azure密钥保管库
3. 用户机密(Secret Manager)(仅在开发环境中)
4. 环境变量
5. 命令行参数
因此,当您发布应用程序时,可以使用环境变量覆盖主机操作系统上的环境。当.NET Core启动已发布的应用程序时,它将读取该变量并加载相应的appsettings.{environment}.json文件。如果未设置该值或该环境不存在文件,则将应用
appsettings.json
中的设置。
您可以在
此处了解有关
ASPNETCORE_ENVIRONMENT
设置的更多信息。