Изменить app.config по умолчанию во время выполнения

У меня следующая проблема:
У нас есть приложение, которое загружает модули (дополнения). Этим модулям могут потребоваться записи в app.config (например, конфигурация WCF). Поскольку модули загружаются динамически, я не хочу, чтобы эти записи были в файле app.config моего приложения.
Я хотел бы сделать следующее:

  • Создать новый файл app.config, содержащий разделы конфигурации из модулей
  • Скажите моему приложению использовать это новое приложение. config

Примечание. Я не хочу перезаписывать app.config по умолчанию!

Он должен работать прозрачно, так что, например, ConfigurationManager.AppSettings использует этот новый файл.

Во время оценки этой проблемы я нашел то же решение, что и здесь: Перезагрузить app.config с помощью nunit .
К сожалению, это ничего не делает, потому что я все еще получаю данные из обычного app.config.

Я использовал этот код для проверки:

Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]);
Console.WriteLine(Settings.Default.Setting);

var combinedConfig = string.Format(CONFIG2, CONFIG);
var tempFileName = Path.GetTempFileName();
using (var writer = new StreamWriter(tempFileName))
{
    writer.Write(combinedConfig);
}

using(AppConfig.Change(tempFileName))
{
    Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]);
    Console.WriteLine(Settings.Default.Setting);
}

Он печатает те же значения дважды, хотя combinedConfig содержит другие значения, отличные от обычного app.config.

128
задан Community 23 May 2017 в 11:47
поделиться