.NET Core 8 appsettings.json 使用 env 特定文件时不默认

问题描述 投票:0回答:1

过去几年我一直在 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();

但是当我尝试这样做时,我得到了同样的行为。

asp.net-core .net-core config appsettings
1个回答
0
投票

确保您已将所有设置文件的“复制到输出目录”设置为“始终复制”/“如果较新则复制”。

没有它,它们将不会与编译的文件一起复制,因此代码将找不到它。

作为调试过程,您可以指定环境特定的设置文件不是可选的,并观察是否抛出异常。

© www.soinside.com 2019 - 2024. All rights reserved.