获取配置文件的路径时,使用AppDomain和ConfigurationManager有什么区别?

Met*_*urf 5 c# configurationmanager configuration-files appdomain

获取当前配置文件的文件路径时,使用AppDomain命名空间和ConfigurationManager命名空间有什么区别?你什么时候用一个而不是另一个?

例如,两者都返回相同的路径:

string f1 = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

string f2 = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ).FilePath;
Run Code Online (Sandbox Code Playgroud)

Chr*_*non 9

它归结为何时以及为什么需要配置文件.它的要点是这样的:

  • ConfigurationManager将为应用程序本身提取配置文件(可选择由当前用户限制).
  • AppDomain将回送它加载的任何配置文件(在某些情况下,它可能与应用程序的文件相同).

作为一个粗略的例子,让我们假设一个应用程序可以使用它动态添加/删除的插件.您不希望在应用程序的生命周期内将这些插件程序集保留在内存中,这会破坏目的,因此您可以在应用程序中创建单独的AppDomain.它将处理应用程序和插件程序集之间的加载和通信,执行您需要执行的任何操作,并且应用程序可以通过在需要时删除AppDomain来卸载程序集.

插件AppDomain有很多设置,您宁愿与客户端配置文件分开,因此在创建AppDomain时,您需要指定单独的文件位置.在 AppDomain中,配置文件是该文件.

但是,客户端配置可能取决于谁在使用它(他们可能有能力更改它并自定义其设置).您宁愿使用由给定用户隔离的应用程序范围的配置,甚至不给他们选择插入特定于插件的设置(或其他用户的设置).从理论上讲,ConfigurationManager可以从任意数量的文件中提取.

这是一个非常笼统的想法,可以解决所有的实现,但希望这开始说明两者可能有何不同.

以下是AppDomainSetupOpenExeConfiguration()的MSDN页面,它们可能很有用,并且还有与配置相关的资源的附加链接.