.NET own configuration file

僤鯓⒐⒋嵵緔 提交于 2020-01-01 05:25:08

问题


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 (into bar.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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!