Ответ 1
Я нашел это, и он работает. "путь" - это путь к файлу конфигурации.
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
Можно ли указать во время выполнения конфигурационный файл, который я хотел бы использовать (кроме 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, и мое приложение не должно ничего писать.
Я нашел это, и он работает. "путь" - это путь к файлу конфигурации.
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
Не напрямую.
Косвенно вы можете:
AppDomain
, укажите для него конфигурационный файл (AppDomainSetup.ConfigurationFile
) и выполните код в домен приложенияfoo.exe
) просто копирует конфигурацию (в bar.exe.config
), а оболочки - второй exe (bar.exe
) [предупреждение: нить гонки]Если вы используете log4net, вы можете указать свой файл конфигурации в AssemblyInfo.cs
Другим решением является рефакторинг и создание собственного ConfigurationRepository
. Затем во время выполнения вы можете изменить, какую конкретную реализацию репозитория вы будете использовать.
Например, AppConfigRepository : ConfigurationRespository
будет просто фасадом для старого ConfigurationManager.AppSettings["key"]
.