Собственный конфигурационный файл.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"]
,