При обновлении до WebJobs SDK 3.0 нарушена переопределенная конфигурация в настройках приложений - PullRequest
0 голосов
/ 17 мая 2019

Я мигрирую проект WebJobs на 3.0, и у меня возникла странная проблема. В моем проекте есть appsettings.json и различные файлы appsettings.environment.json.

При работе в любой среде вместо настроек среды, переопределяющих базовые настройки, происходит обратное: если в базовых настройках и настройках среды существуют какие-либо настройки, используются базовые настройки.

Я пробовал варианты использования HostBuilder.ConfigureAppConfiguration() и HostBuilder.ConfigureHostConfiguration(), и в каждом случае я замечаю что-то своеобразное, когда смотрю на hostInstance.Configuration.Providers: всегда есть три экземпляра JsonConfigurationProvider с двумя из них внутри 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();

1 Ответ

0 голосов
/ 17 мая 2019

Просто разобрался.

Метод расширения для ConfigureWebJobs() вызывает ConfigureAppConfiguration() и автоматически добавляет настройки приложения. Поскольку я звонил ему после вызова ConfigureAppConfiguration(), по этой причине последний appsettings.json был базовым.

Код от WebJobsHostBuilderExtensions.ConfigureWebJobs :

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

Хуже всего то, что они кажутся такими излишними.

...