В конфигурации приложения Azure я назвал свои параметры следующим образом: «Section1__SubSection1__MySetting». При попытке привязать конфигурацию к соответствующему классу параметров в моем приложении .NET 6 она не отображается правильно (нуль). Если я изменю «__» на «:», все будет работать нормально.
Я пытаюсь разобраться, почему и как вы можете использовать двойное подчеркивание для обозначения вложенности, потому что обычно рекомендуется использовать «__» для более универсальной поддержки. Если я использую «:» в ключах конфигурации приложений Azure, будет ли оно работать, если я запущу свое приложение на компьютере с Linux?
Может кто-нибудь объяснить все это?
Можете поделиться снимком экрана настроек приложения.
А также поделитесь кодом, который вы пытаетесь привязать к конфигурации.


Написано с помощью [StackEdit](>Двойное подчеркивание не эквивалентно двоеточию при попытке обозначить вложенность
Да, обозначение вложенной конфигурации зависит от среды хостинга (Windows/Linux).
Если вы хотите установить вложенную конфигурацию в приложении Windows, вам необходимо указать символ : после имени вложенного ключа (который вы уже пробовали).
Вы можете видеть, что то же самое упоминается в MSDoc
В службе приложений Linux по умолчанию или пользовательском контейнере Linux любую вложенную структуру ключей JSON в имени параметра приложения, например
ApplicationInsights:InstrumentationKey, необходимо настроить в Службе приложений какApplicationInsights__InstrumentationKeyдля имени ключа. Другими словами, любой:следует заменить на__(двойное подчеркивание).
__.Проверьте приведенное ниже обходное решение:
Я выполнил Конфигурацию приложений Azure с ASP.NET Core, чтобы добавить вложенную конфигурацию.
Я создал веб-приложение и развернул его на Linux App Service.
Изначально я установил конфигурацию с помощью : и __.

и попытался получить значения.
В Program.cs:
string myconn = builder.Configuration.GetConnectionString("AppConfig");
//string myconn = builder.Configuration.GetSection("AppConfig").Value;
builder.Configuration.AddAzureAppConfiguration(myconn);
В Index.cshtml:
<h4>With Semicolon - @myconfig["Test:Settings:SemiColon"]</h4>
<h4>With UnderScore - @myconfig["Test__Settings__UnderScore"]</h4>
Локальный выход:

Я развернул приложение на Azure Linux App service.
Вывод развернутого приложения:

И :, и __ работали у меня для развернутого приложения в Linux App Environment с Azure App Configuration.
Когда я попробовал то же самое с Azure App Settings,
Локальный appsettings.json файл:
"Section1": {
"SubSection1": {
"MySetting": "Value from Local"
}
}
: и попытался получить значение.Локальный выход:

: worked here.
Я развернул приложение на Azure Linux App service.
To override the value with the Azure App Settings, I have set the value as below (with:).


__ и это позволило мне добавить.
Вывод развернутого приложения:

Если я использую «:» в ключах конфигурации приложений Azure, будет ли оно работать, если я запущу свое приложение на компьютере с Linux?
Да, : работает на Azure Linux App Service в Azure App Configuration.
Тогда как над __ работал только Azure Linux с Azure App Settings.
Спасибо за подробный ответ! Это помогло многое объяснить. Итак, похоже, что поставщик конфигурации приложений Azure автоматически обрабатывает преобразование «:» в «__» в средах Linux, если я правильно понимаю, верно?
@killswitch — не преобразование. Мы не можем редактировать имя ключа, можно изменить только значение. Конфигурация приложения принимает __ новую запись.
Но поскольку «:» работает в Службе приложений Azure Linux, то, чтобы он работал, поставщик интерпретирует его как «__».
Да... согласно обходному пути, я заметил, что оба работают.
AFAIK,
:не будет работать в среде Linux.