过去几年我一直在 Java 领域工作,现在又重新开始使用 .NET。我正在努力让我的配置按照我的意愿工作。
我想要这样的结构:
appsettings.json
:与环境无关的默认设置appsettings.local.json
:本地特定配置覆盖appsettings.dev.json
:开发特定配置覆盖appsettings.stage.json
:阶段特定配置覆盖我遇到的问题是,当使用
appsettings.local.json
文件(或任何其他环境特定文件)时,即使 appsettings.json
文件没有加载,也不会加载 appsettings.local.json
文件中的基值不要覆盖它们。
配置设置代码:
var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;
configuration
.AddEnvironmentVariables()
.Build();
appsettings.json
:
{
...
"Mctv": {
"Port": "8080",
"CORS": {
...
appsettings.local.json
:
{
...
"Mctv": {
"Run-Environment": "local",
"CORS": {
...
请注意,
Port
文件中未指定 appsettings.local.json
设置,我希望它仅使用 appsettings.json
文件中的值。
如何设置,以便在不被特定于 env 的配置文件中的值覆盖时,遵守
appsettings.json
中的环境无关配置?
现在当我跑步时
"ASPNETCORE_ENVIRONMENT": "local"
仅使用
application.local.json
文件中的值。
编辑
我在网上看到一些帖子说要做这样的事情:
var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
configuration
.AddEnvironmentVariables()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", reloadOnChange: true, optional: false)
.AddJsonFile($"appsettings.{environmentName}.json", reloadOnChange: true, optional: true)
.Build();
但是当我尝试这样做时,我得到了同样的行为。
确保您已将所有设置文件的“复制到输出目录”设置为“始终复制”/“如果较新则复制”。
没有它,它们将不会与编译的文件一起复制,因此代码将找不到它。
作为调试过程,您可以指定环境特定的设置文件不是可选的,并观察是否抛出异常。