Собственный файл конфигурации .NET

Можно ли указать во время выполнения конфигурационный файл, который я хотел бы использовать (кроме App.config)? Например, я хотел бы прочитать первый аргумент из командной строки, который будет путь к конфигурации приложения, и я хотел бы, чтобы мое приложение ссылалось на него, когда я использую ConfigurationManager.AppSettings(это, вероятно, невозможно, но все же стоит его спросить).
Я нашел этот фрагмент кода:

System.Configuration.Configuration config
    = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        config.AppSettings.File = myRuntimeConfigFilePath;
        config.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection("appSettings");

Он работает, но он переопределяет исходный раздел AppSettings App.config, и мое приложение не должно ничего писать.

Ответ 1

Я нашел это, и он работает. "путь" - это путь к файлу конфигурации.

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);

Ответ 2

Не напрямую.

Косвенно вы можете:

  • выделите второй AppDomain, укажите для него конфигурационный файл (AppDomainSetup.ConfigurationFile) и выполните код в домен приложения
  • имеют два exes; первый (foo.exe) просто копирует конфигурацию (в bar.exe.config), а оболочки - второй exe (bar.exe) [предупреждение: нить гонки]

Ответ 3

Если вы используете log4net, вы можете указать свой файл конфигурации в AssemblyInfo.cs

Ответ 4

Другим решением является рефакторинг и создание собственного ConfigurationRepository. Затем во время выполнения вы можете изменить, какую конкретную реализацию репозитория вы будете использовать.

Например, AppConfigRepository : ConfigurationRespository будет просто фасадом для старого ConfigurationManager.AppSettings["key"].