Совместное использование / преобразование наборов приложений в разных проектах и средах

#azure #asp.net-core #azure-devops #web-deployment

#azure #asp.net-core #azure-devops #веб-развертывание

Вопрос:

Я получил решения Visual Studio с несколькими проектами (функциональные приложения и веб-API) и уровнем данных, который является общим для всех проектов. Я настроил решение таким образом, чтобы все проекты использовали одну и ту же конфигурацию ( appsettings.json ) на основе этой статьи: https://andrewlock.net/sharing-appsettings-json-configuration-files-between-projects-in-asp-net-core/

Все проекты основаны на .net core.

Я настроил конвейер сборки и выпуска для среды разработки. Но мне нужна тестовая и производственная среда. Как мне преобразовать общую конфигурацию перед выпуском ее в тестовую и производственную среду?

Ответ №1:

Вы этого не делаете. Конфигурация работает не так в ASP.NET Ядро. Конфигурация переопределена, а не преобразована. Существует порядок операций применения различных источников конфигурации, который в основном соответствует порядку, в котором они зарегистрированы. По умолчанию используется JSON < JSON, зависящий от среды < Пользовательские секреты < Переменные среды < Аргументы командной строки.

Если вам нужно, чтобы конфигурация зависела от среды, вы будете полагаться на JSON-файлы для конкретной среды (для общей конфигурации) или переменные среды и / или что-то вроде Azure Key Vault (для секретов). Поскольку все это появляется позже при регистрации конфигурации, любое значение, которое вы там зададите, переопределит значения в вашем appsettings.json .

Для таких вещей, как JSON для конкретной среды, загружаемый параметр зависит от значения ASPNETCORE_ENVIRONMENT , которое может быть задано как переменная среды или передано в качестве аргумента командной строки --environment . В любом случае установленное значение соответствует {environment} части appsettings.{environment}.json . Другими словами, если вы установите среду как Production , то appsettings.Production.json она будет загружена в конфигурацию, если она присутствует. Переменные среды привязаны к самой среде, поэтому не зависят от какого-либо конкретного значения среды.

Комментарии:

1. Итак, мне нужно будет иметь наборы приложений для каждой среды в каждом из моих проектов? Я пытаюсь избежать необходимости дублировать наборы приложений.

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

3. Все функциональные приложения являются отдельными проектами веб-api, все они полагаются на некоторые репозитории. Таким образом, приложения должны иметь строку подключения и т.д. После ее развертывания.

4. Смотрите, это прекрасный пример. Если всем приложениям требуется одна и та же строка подключения, значит, вы неправильно абстрагировали свою зависимость от данных и / или вы на самом деле не разделяете свой домен. Другими словами, у вас все еще есть монолитное приложение, просто разбитое на отдельные проекты.

5. Определенно существуют варианты использования для совместного использования конфигурации в нескольких доменах. Возможно, вашей системе захочется предоставить общую конфигурацию ведения журнала, строку подключения к SQL Server, объединительную плату Redis, служебную шину Azure и т.д. Это никоим образом не нарушает принципы проектирования. В Azure даже существуют целые решения, построенные на основе этой концепции, которые называются Azure App Configuration