升级到WebJobs SDK 3.0在AppSettings中损坏了覆盖配置



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

在任何环境下运行时,而不是环境设置覆盖基本设置时,会发生反向:当使用基本设置和环境设置中的任何设置时,都会使用基本设置。

我已经尝试了使用HostBuilder.ConfigureAppConfiguration()HostBuilder.ConfigureHostConfiguration()的变体,在每种情况下,我都会注意到hostInstance.Configuration.Providers时的某些内容:JsonConfigurationProvider总有三个实例,在配置主机或作为MAIM的一部分时,有两个内部的ChainedConfigurationProvider中的两个实例使用应用程序时提供商数组。第一个实例始终是我的基础,第二个始终是环境,第三个始终是基础。

所以我相信我的问题是添加了第三个jsonconfigurationprovider,但我不知道它是如何添加的。

这是我的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();

只是弄清楚了。

ConfigureWebJobs()调用ConfigureAppConfiguration()的扩展方法并自动添加AppSetting。由于我在调用ConfigureAppConfiguration()之后打电话给它,这是最后一个 appsettings.json 是基本的原因。

webjobshostbuilderextensions.configurewebjobs的代码:

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

最糟糕的部分是这些看起来如此多余。

相关内容

  • 没有找到相关文章

最新更新