Загадки Configuration в NET Core
Не могу понять, почему так получается.
я делаю очень стандартную операцию:
я создаю проект командой
dotnet new webapi --framework=net7.0 --use-program-main --name ConfigExamle
dotnet new sln --name ConfigExamle
Затем я просто добавляю проект в solution (ну, просто чтобы у меня был solution, с которым я буду работать дальше)
И еще - я исправляю в конфигурации версию фреймворка с 7 на 8-ю или 9-ю
Согласитесь, я почти ничего не сделал.
Минимальные настройки.
Совершенно стандартаная конфигурация проекта.
Потом я добаляю в проект одну строку (в Main):
string connectionString = builder.Configuration.GetConnectionString("DefaultConnection")!;
Запускаю проект в отладке, становлюсь на строку, которую добавил и вижу в переменной builder.Configuration... ОГРОМНЫЙ конфиг, состоящий из более чем 100 секций.
я ничего не написал в appsettings.json и appsettings.Development.json
я даже не начал добавлять в конфигурацию какие либо параметры.
Откуда же это всё взялось? как здесь работает магия Configuration?
Спасибо. (я уже три дня пытаюсь понять, почти сломал голову...)
Ссылка на вот этот самый код, папка ConfigExample
Примечание.
Это - не искусственный пример. я хочу, чтобы у меня были в проекте классические контроллеры в папке Controllers, поэтому я прошу dotnet сгенерировать мне проект "для старой версии 7.0". Потом я поднимаю версию dotnet в настройках проекта.
Если я не переключусь на более новую версию фреймворка - этого "зоопарка из сотни секций в конфиге" не будет.
Но! я только что провёл эксперимент. Если я сразу сделаю проект с версией NET Core 9.0 - то я опять получу огромный конфиг... У меня не будет моих любимых контроллеров, но конфиг опять будет содержать кучу того, что я туда не добавлял.
Ответы (1 шт):
Разгадка в том, что в конфигурацию по умолчанию добавляются переменные среды: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-9.0
The initialized WebApplicationBuilder (builder) provides default configuration for the app in the following order, from highest to lowest priority:
...
Non-prefixed environment variables using the Non-prefixed environment variables configuration provider.
Но так было не всегда. Предположительно, это было привнесено этим изменением в 2023 году: https://github.com/dotnet/aspnetcore/pull/46579. Когда вы запускаете на более старой версии, используется код до этого изменения.