我已经查看了关于这个主题的其他问题,但似乎没有一个问题与我的问题相同。配置:
- 目标框架: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”。
在构建完成后,查看主机并深入挖掘,似乎它将尝试加载开发文件:
我检查了bin文件夹中的文件,它绝对不是空的。
appsettings.Development.json
的提供程序? - Ray