Host.CreateDefaultBuilder未加载环境配置覆盖

3

我已经查看了关于这个主题的其他问题,但似乎没有一个问题与我的问题相同。配置:

  • 目标框架:netcoreapp3.1
  • 控制台应用程序(但不是ASP.Net...只是普通的控制台应用程序)

根据文档,这组调用:

        var builder = Host.CreateDefaultBuilder(args);
        builder.ConfigureServices(ConfigureServices);
        var host = builder.Build();

应该自动加载适当的环境配置覆盖。
(在这种情况下,ConfigureServices 只加载一个虚拟服务)
我有一个 appconfig.json,一个 appconfig.Development.json,两个都标记为“始终复制”,并显示在目标目录中。
它们各自只有一个条目,相同的条目,但值不同:
  {
    "Foo": "Bar" 
  }

并且

  {
    "Foo": "Quz" 
  }

我已经在launchSettings.json文件中设置了这些环境变量:
  {
    "profiles": {
      "ConsoleApp1": {
        "commandName": "Project",
        "environmentVariables": {
          "DOTNET_ENVIRONMENT": "Development",
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      }
    }
  }

当我运行应用程序时,它显示它在正确的环境中:
        var hostEnv = host.Services.GetService(typeof(IHostEnvironment)) as IHostEnvironment;

        Console.WriteLine($"Environment: {hostEnv.EnvironmentName}");

显示:

    Environment: Development

但是当我尝试检索配置值时,我得到的是基础值,而不是覆盖值:
        var config = host.Services.GetService(typeof(IConfiguration)) as IConfiguration;
        var children = config.GetChildren();
        var foo = children.First(c => c.Key == "Foo");
        Console.WriteLine($"Foo: {foo.Value}");

显示:

    Foo: Bar

但基于重写,它应该显示为“Foo: Quz”。

在构建完成后,查看主机并深入挖掘,似乎它将尝试加载开发文件: DebugViewOfHostDevelopmentConfig

但是,在检索配置根本身时,似乎它是空的: DebugViewOfEmptyDevelopmentConfig

我检查了bin文件夹中的文件,它绝对不是空的。


在主机构建的位置设置断点,并检查配置提供程序(它们很容易导航)。您是否看到任何引用 appsettings.Development.json 的提供程序? - Ray
1
@Ray,我添加了更多信息来回答你的问题。说实话,这让问题变得更加令人困惑。 - Reginald Blue
更奇怪的是,我使用你的源代码在 .NET 6 上重新创建了解决方案(目前没有安装 .NET Core 3),而且它完美地运行了... 你可以尝试从头开始重新创建这些 JSON 文件吗?不像是 BOM 或一些奇怪的编码错误导致加载“Development.json”文件失败。 - Ray
1个回答

3

非常遗憾,这里的答案既令人尴尬又让人失望。我想删除这个问题,但或许这会帮助其他人。

答案是我所用的文件名不是:

appsettings.Development.json

而是

appsettings.Development..json

请注意,在Visual Studio Solution Explorer中很难看到json之前有两个点。

enter image description here


很高兴听到问题所在,我已经在想这是否是一个愚蠢的疏忽 :o) - Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接