Приложения для функции Azure на .net 8 (изолированные) ⇐ C#

Место общения программистов C#
Anonymous
Приложения для функции Azure на .net 8 (изолированные)

Сообщение Anonymous »

контекст < /h3>
У меня существующая функция Linux Azure, работающая на .net 6 (In-Process) v4. У меня много конфигурации, поступающая от Appsettings.json . Большинство из этих конфигураций представляют собой объекты с вложенными свойствами или массивами (ничего необычного, но общего JSON). Некоторые из этих конфигураций переопределены панелью переменной среды Azure (прежняя панель конфигурации), особенно для ConnectionStrings или некоторых настройки, связанных с ProD (таймер истечения и т. Д.), Но большинство приложений. Согласно документации, я должен мигрировать в изолированную модель работника. Это тяжелое нарушающее изменение, которое причиняет большую боль, но я могу справиться с этим. Реальная проблема заключается в том, что конфигурация Appsettings.json больше не загружается (как это раньше) при запуске в Azure. Все в порядке при запуске локально. Я потратил много времени, пытаясь заставить его загрузить без успеха. Config прекрасно выходит из панели переменной среды Azure. У нас есть план развертывания конфигурации через шаблоны BICEP, но это имеет гораздо большее значение для общей инфраструктуры проекта. Мне пришлось бы сгладить все мои конфигурации, и это было бы беспорядком.

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

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();
< /code>
DummyOption

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

public class DummyOption
{
public string Foo { get; set; }
}
< /code>
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);
}
}
< /code>
appsettings.json

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

{
"DummyOption": {
"Foo": "Test"
}
}
< /code>
The function returns {"Foo":"Test"}
при запуске локально, но {"foo": null} при запуске в Azure. Функция возвращает {"foo": "yolo"} , если я добавляю DummyOption__foo = yolo на панели Erionement Entrionement, но опять же я не хочу этого делать. Это было бы болью для поддержания и масштабирования.

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

PreserveNewest
true
PreserveNewest

< /code>
I even confirmed the file exists, and is accessible by adding some logs in ConfigureAppConfiguration
.
Наконец, добавив дополнительные журналы в конфигурации configureservice , я вижу, что приложения.>

Подробнее здесь: https://stackoverflow.com/questions/781 ... 8-isolated

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