Собственный конфигурационный файл .NET - PullRequest
7 голосов
/ 10 февраля 2009

Есть ли способ указать во время выполнения файл конфигурации, который я хотел бы использовать (кроме 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 ]

9 голосов
/ 11 февраля 2009

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

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
4 голосов
/ 10 февраля 2009

Не напрямую.

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

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

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

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

0 голосов
/ 10 февраля 2009

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

...