问题
Is there any way that I could specify at runtime the configuration file I would like to use (other than App.config)? For example I would like to read a first argument from a command line that will be a path to the application's config and I would like my application to refer to it when I use ConfigurationManager.AppSettings (It's probably impossible but still it's worth asking).
I did find this piece of code:
System.Configuration.Configuration config
= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.File = myRuntimeConfigFilePath;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
It works, but it overrides the original App.config's AppSettings section and my application isn't supposed to write anything.
回答1:
I found this and it works. "path" is a path to configuration file.
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
回答2:
Not directly.
Indirectly, you could:
- spin up a second
AppDomain
, specify the config-file for that (AppDomainSetup.ConfigurationFile), and execute the code in the app domain - have two exes; the first (
foo.exe
) simply copies the config (intobar.exe.config
) and shells the 2nd exe (bar.exe
) [warning: thread race]
回答3:
If you're using log4net you can specify your configuration file in the AssemblyInfo.cs
回答4:
Another solution is to refactor and create your own ConfigurationRepository
. Then you can change at runtime what specific repository implementation you will use.
For example, AppConfigRepository : ConfigurationRespository
will just be a facade for the old ConfigurationManager.AppSettings["key"]
.
来源:https://stackoverflow.com/questions/531859/net-own-configuration-file