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

标签 c# configuration-files appdomain configurationmanager

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

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

string f1 = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

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

最佳答案

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

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

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

插件 AppDomain 有相当多的设置,您宁愿将它们与客户端配置文件分开,因此当您创建 AppDomain 时,您需要指定单独的文件位置。在 that AppDomain 中,配置文件就是 that file

不过,客户端配置可能取决于使用它的人(并且他们可能能够更改它并自定义他们的设置)。您宁愿使用由给定用户隔离的应用程序范围的配置,甚至不让他们选择混淆特定于插件的设置(或其他用户的设置)。 ConfigurationManager 理论上可以从任意数量的文件中提取

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

这是 AppDomainSetup 的 MSDN 页面和 OpenExeConfiguration()同样,这可能很有用,并且有指向配置相关资源的附加链接。

关于c# - 获取配置文件的路径时使用 AppDomain 和 ConfigurationManager 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919544/

相关文章:

c# - 从应用程序内启动和停止本地 mysql 实例

java - Spring : Exception starting filter springSecurityFilterChain

unity-container - 拆分统一配置文件

plugins - 自定义 SpecFlow TestGeneratorProvider 注册在测试生成时导致 NullReferenceException

asp.net - 将目录添加到 ASP.NET 卷影副本

c# - Rhino Mocks 中不区分大小写的期望

c# - 整数 32?与我可比

c# - Autofac 解析不同 AppDomain 中的对象

c# - 使用 NHibernate 重用线程的 session

c# - 尝试访问已卸载的应用程序域(调用 AzMan)