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

时间:2011-08-02 22:36:40

标签: c# configuration-files appdomain configurationmanager

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

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

string f1 = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

string f2 = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ).FilePath;

1 个答案:

答案 0 :(得分:9)

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

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

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

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

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

这是一个非常普遍的想法,它将所有的实现手工拉开,但希望这开始说明两者可能有何不同。

以下是AppDomainSetupOpenExeConfiguration()的MSDN页面,这些页面可能很有用,并且还包含指向配置相关资源的其他链接。