Используйте параметры приложения непосредственно из веб-приложения Azure, а не из appsettings.Production.json

Я хотел бы использовать параметры приложения для производственной среды, как они определены в веб-приложении Azure: см. Здесь

В настоящее время использую appsettings*.json файлы, чтобы получить эти значения в Program.cs для правильной среды:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((builderContext, config) =>
        {
            IHostingEnvironment env = builderContext.HostingEnvironment;

            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
               .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
        })
        .UseStartup<Startup>()
        .Build();

Эти значения в настоящее время определены в JSON, например,

"ConnectionStrings": {
    "LocalizationAdminContext": "Data Source=example;Initial Catalog=example;Integrated Security=True;MultipleActiveResultSets=True"
  },
  "DbResourceConfiguration": {
    "ConnectionString": "Data Source=example;Initial Catalog=example;Integrated Security=True;MultipleActiveResultSets=True"
  }

Я пытался удалить их из appsettings.production.json чтобы заставить его использовать те, которые поставляются в Azure, но он допустил ошибку. Я думаю, что, как это установлено в Program.cs он всегда будет искать настройки в соответствующем json-файле среды.

Как мне переписать это в конфиге, чтобы использовать настройки приложения? Предпочтительно только для производственной среды.

1 ответ

Решение

Ну, я не уверен, что это на самом деле проблема, но в любом случае это бесполезный код. CreateDefaultBuilderсреди прочего, настраивает различные провайдеры конфигурации, в том числе для appsettings.json а также appsettings.{environment}.json, Затем он продолжает добавлять такие вещи, как переменные среды.

В лучшем случае, нет причин для вашего звонка ConfigureAppConfigurationтак как эти файлы уже добавляются через вызов CreateDefaultBuilder, Тем не менее, существует также порядок действий при добавлении конфигурации: а именно, поставщики конфигурации, добавленные позже, переопределяют ранее добавленные. Таким образом, добавляя ваши файлы JSON снова вот так, вы фактически делаете их последним включенным поставщиком конфигурации, то есть они переопределяют все. Я считаю, что параметры приложения в Azure добавляются в качестве переменных среды. Обычно это заставляет их переопределять все ваши файлы JSON, поскольку поставщик переменных среды добавляется после поставщиков JSON. Тем не менее, вы перевернули скрипт, сделав его переопределенным JSON.

Я не уверен, почему удаление их из вашего JSON приведет к ошибке, но я достаточно уверен, что простое удаление ConfigureAppConfiguration вызов должен просто заставить все работать как задумано.

Другие вопросы по тегам