Собственный конфигурационный файл.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, и мое приложение не должно ничего писать.

4 ответа

Решение

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

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

Не напрямую.

Косвенно вы могли бы:

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

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

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

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

Другие вопросы по тегам