Использование внешнего файла конфигурации для строк подключения в нескольких проектах - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу знать, есть ли лучший способ использовать строки подключения во внешних файлах в моем решении, поскольку в моем решении есть 8 отдельных проектов, все из которых используют одни и те же строки подключения. Согласно этому:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings-and-configuration-files#using-external-configuration-files

использование внешнего файла (для строк подключения) тривиально и может быть легко сделано (используя что-то вроде configSource="connections.config). Тем не менее, чтобы сделать эту работу, мы должны следовать этим рекомендациям:

  1. Внешний файл должен существовать в папке проекта
  2. Для внешнего файла должно быть установлено свойство true «CopyToOutputFolder»

В моем случае это можно сделать , но управлять этим во всех 8 проектах проблематично, особенно если мне нужно добавить новую строку подключения, изменить одну из настроек (целевая база данных, имя пользователя , пароль), или когда мне нужно добавить новый проект.

- К вашему сведению: каждый из этих проектов представляет собой веб-задания, которые развертываются на сервере Azure. Добавление нового веб-задания для новой функции, новой утилиты и т. Д. Или удаление старого веб-задания по ряду причин не является редкостью. Это решение постоянно меняется, что увеличивает сложность управления этими настройками в каждом проекте отдельно. Кроме того, управление строками подключения на рабочем сервере не вызывает проблем, поскольку каждое веб-задание наследует эти строки подключения от службы родительского приложения.

Я хотел бы знать, возможно ли что-либо из следующего:

  1. Можно ли использовать отдельный файл NOT в папке проекта для строк подключения?
  2. Можно ли динамически (во время выполнения) загружать строки подключения в диспетчер конфигурации? (одно замечание по этому поводу - я знаю, что это возможно , но мне нужно иметь возможность сделать это, не затрагивая основной файл app.config)
  3. Существует ли другой тип из ConfigurationManager, который обычно используется для загрузки этих строк соединения в решение, которое будет соответствовать моим требованиям?

1 Ответ

0 голосов
/ 05 ноября 2018

Вы не упоминаете, какую версию dotnet вы используете, однако, если вы используете ядро ​​dotnet, конфигурация приложения может быть получена из переменных среды.

Я думаю, что это может решить вашу проблему, потому что вам не нужно отслеживать какие-либо дополнительные файлы между вашими проектами, и, на мой взгляд, имеет большой смысл, потому что любые защищенные данные не будут видны любому разработчику или будут храниться в любом хранилище , Только devops будет знать об этом, когда они установят это первоначально. Кроме того, это приближает ваше приложение к 12 факторам https://12factor.net/.

Чтобы использовать это, убедитесь, что ваш файл Startup.cs содержит раздел для загрузки переменных среды, таких как

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", true, true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
    .AddEnvironmentVariables()
    .Build();

dotnet core Environment Environment Поставщик cnfiguration

Вероятно, вы можете создать bat-файл, чтобы все сначала установить

setx connection_string="Server=xxxxxxxxx" /M

Это создаст ваши переменные окружения и установит значения, которые вы задаете.

Надеюсь, вы найдете это полезным.

...