AppSettings для AzureFunction в .NET 8 (изолировано)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 AppSettings для AzureFunction в .NET 8 (изолировано)

Сообщение Anonymous »

Контекст
У меня есть функция Linux Azure, работающая в .Net 6 (в процессе) v4. У меня есть много настроек из appsettings.json. Большинство этих конфигураций представляют собой объекты с вложенными свойствами или массивами (ничего особенного, но обычный JSON). Некоторые из этих конфигураций переопределяются панелью переменных среды Azure (бывшая панель конфигурации), особенно для ConnectionStrings или некоторых параметров, связанных с продуктом (таймер истечения срока действия и т. д.), но большая часть конфигурации appsettings.json является настройками по умолчанию для применить к каждому окружению.
Проблема
Я пытаюсь обновить функцию Azure до .NET 8. Согласно документации, мне нужно перейти на изолированную рабочую модель. Это серьезное изменение, причиняющее много боли, но я справлюсь. Реальная проблема заключается в том, что конфигурация appsettings.json больше не загружается (как раньше) при работе в Azure. При локальном запуске все в порядке. Я потратил много времени, пытаясь загрузить его, но безуспешно. Конфигурацию можно легко получить с панели переменных среды Azure.
Чего я не хочу делать
  • Я Я не хочу полагаться исключительно на панель переменных среды Azure, поскольку не хочу реплицировать и поддерживать все конфигурации по умолчанию во всех средах. У нас есть план по развертыванию конфигурации с помощью шаблонов бицепсов, но это имеет гораздо большее влияние на общую инфраструктуру проекта.
  • Я не хочу использовать local.json в качестве он не может работать с объектами или массивами JSON. Мне пришлось бы сгладить все мои конфигурации, и это было бы беспорядок.
Пример кода
Я воспроизвел проблему в тестовом проекте с фиктивной настройкой и испытываю такое же поведение

Код: Выделить всё

Program.cs

Код: Выделить всё

var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices((appBuilder, services) =>
{
var configuration = appBuilder.Configuration;

services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();

services.Configure(configuration.GetSection(nameof(DummyOption)));
})
.ConfigureAppConfiguration((hostingContext, configBuilder) =>
{
var env = hostingContext.HostingEnvironment;

configBuilder
.AddJsonFile(Path.Combine(env.ContentRootPath, $"appsettings.json"), optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
})
.Build();

host.Run();

Код: Выделить всё

DummyOption

Код: Выделить всё

public class DummyOption
{
public string Foo { get; set; }
}

Код: Выделить всё

DummyFunction.cs

Код: Выделить всё

    public class DummyFunction
{
private readonly ILogger _logger;
private readonly DummyOption _options;

public DummyFunction(ILogger logger, IOptions options)
{
_logger = logger;
_options = options.Value;
}

[Function("DummyConfig")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
var json = JsonSerializer.Serialize(_options);
return new OkObjectResult(json);
}
}

Код: Выделить всё

appsettings.json

Код: Выделить всё

{
"DummyOption": {
"Foo": "Test"
}
}
Функция возвращает {"Foo":"Test" при локальном запуске, но {"Foo":null при запуске в Azure. Функция возвращает {"Foo":"yolo", если я добавляю DummyOption__Foo = yolo на панели среды Azure, но опять же, я не хочу этого делать. Это будет сложно поддерживать и масштабировать.
Кроме того, я добавил следующий код csproj для развертывания файла appsettings.json вместе со сборкой и подтвердил существование файла. рядом с DLL в файлах приложения-функции.

Код: Выделить всё

      
PreserveNewest
true
PreserveNewest

Я даже подтвердил, что файл существует и доступен, добавив несколько журналов в ConfigurationAppConfiguration.
Наконец, добавив больше журналов в ConfigurationService, я вижу, что конфигурация appsettings.json вообще не загружена в конфигурацию.
У меня заканчиваются варианты, и мне бы хотелось что-нибудь помогите.
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/781 ... 8-isolated
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • AppSettings для AzureFunction в .NET 8 (изолировано)
    Гость » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Гость
  • AppSettings для AzureFunction в .NET 8 (изолировано)
    Гость » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Гость
  • AppSettings для AzureFunction в .NET 8 (изолировано)
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Можем ли мы использовать один файл appsettings.json вместо поддержки нескольких версий appsettings.{environmentname}.jso
    Anonymous » » в форуме C#
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Перемотка неудачного экземпляра функции Azure Durable (изолировано)
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»