.net core 升级到WebJobs SDK 3.0已破坏appsettings中的重写配置

.net core 升级到WebJobs SDK 3.0已破坏appsettings中的重写配置,.net-core,azure-webjobs,azure-webjobssdk,.net Core,Azure Webjobs,Azure Webjobssdk,我将一个WebJobs项目迁移到3.0,遇到了一个特殊的问题。我的项目有一个appsettings.json和各种appsettings.environment.json文件 在任何环境下运行时,都会发生相反的情况,而不是环境设置覆盖基本设置:如果基本设置和环境设置中存在任何设置,则使用基本设置 我尝试过使用HostBuilder.ConfigureAppConfiguration()和HostBuilder.ConfigureHostConfiguration()的各种变体,在每种情况下,当我

我将一个WebJobs项目迁移到3.0,遇到了一个特殊的问题。我的项目有一个appsettings.json和各种appsettings.environment.json文件

在任何环境下运行时,都会发生相反的情况,而不是环境设置覆盖基本设置:如果基本设置和环境设置中存在任何设置,则使用基本设置

我尝试过使用
HostBuilder.ConfigureAppConfiguration()
HostBuilder.ConfigureHostConfiguration()
的各种变体,在每种情况下,当我查看
hostInstance.Configuration.Providers
时,我都会注意到一些特殊的情况:总是有三个
JsonConfigurationProvider
,配置主机时使用两个内部
ChainedConfigurationProvider
,或者使用应用程序时仅作为主提供程序阵列的一部分。第一个实例始终是我的基础,第二个实例始终是环境,第三个实例始终是基础

所以我认为我的问题是第三个JSONConfiguration提供程序正在添加,但我不知道它是如何添加的

以下是我的WebJob中的相关代码:

var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
        ?? Environment.GetEnvironmentVariable("ENV")
        ?? "development";

var builder = new HostBuilder()
    .UseEnvironment(envName)
    .ConfigureAppConfiguration(b =>
    {
        b.SetBasePath(Environment.CurrentDirectory)
            .AddCommandLine(args, StartupSettings.SwitchMapping)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{envName}.json", optional: false, reloadOnChange: true)
            .AddEnvironmentVariables();
    });

builder.ConfigureWebJobs((context, b) =>
{
    b.AddAzureStorageCoreServices();
    b.AddAzureStorage();
    b.AddTimers();
});
builder.ConfigureLogging((context, b) =>
{
    if (false && context.HostingEnvironment.IsDevelopment())
    {
        b.SetMinimumLevel(LogLevel.Debug);
    }
    else
    {
        b.SetMinimumLevel(LogLevel.Information);
        b.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning);
    }
    b.AddConsole();

    var applicationInsightsKey = context.Configuration.GetValue<string>("ApplicationInsights:InstrumentationKey");
    b.AddApplicationInsights(o => o.InstrumentationKey = applicationInsightsKey);
})
.UseConsoleLifetime();

builder.ConfigureServices((context, services) =>
{
    /*...*/
});

return builder.Build();
var envName=Environment.GetEnvironmentVariable(“ASPNETCORE\u环境”)
?? Environment.GetEnvironmentVariable(“ENV”)
?? “发展”;
var builder=新主机生成器()
.UseEnvironment(envName)
.ConfigureAppConfiguration(b=>
{
b、 SetBasePath(Environment.CurrentDirectory)
.AddCommandLine(参数、StartupSettings.SwitchMapping)
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddJsonFile($“appsettings.{envName}.json”,可选:false,重载更改:true)
.AddenEnvironmentVariables();
});
builder.ConfigureWebJobs((上下文,b)=>
{
b、 AddAzureStorageCoreServices();
b、 AddAzureStorage();
b、 AddTimers();
});
builder.ConfigureLogging((上下文,b)=>
{
if(false&&context.HostingEnvironment.IsDevelopment())
{
b、 SetMinimumLevel(LogLevel.Debug);
}
其他的
{
b、 SetMinimumLevel(日志级别信息);
b、 AddFilter(“Microsoft.EntityFrameworkCore.Database.Command”,LogLevel.Warning);
}
b、 AddConsole();
var applicationInsightsKey=context.Configuration.GetValue(“ApplicationInsights:InstrumentationKey”);
b、 添加ApplicationInsights(o=>o.InstrumentationKey=applicationInsightsKey);
})
.UseConsoleLifetime();
builder.ConfigureServices((上下文,服务)=>
{
/*...*/
});
返回builder.Build();
刚刚想好了

ConfigureWebJobs()
的扩展方法调用
ConfigureAppConfiguration()
并自动添加appsettings。因为我是在调用
ConfigureAppConfiguration()
之后调用它的,所以最后一个appsettings.json是基本的appsettings.json

代码来源:

最糟糕的是,这些似乎是多余的

builder.ConfigureAppConfiguration(config =>
{
   config.AddJsonFile("appsettings.json", optional: true);
   config.AddEnvironmentVariables();
});