OpenMappedExeConfiguration与OpenExeConfiguration

时间:2010-10-12 08:19:02

标签: c# .net vb.net

OpenExeConfiguration有2个重载:

OpenMappedExeConfiguration只有一个原型:

似乎(2)和(3)都可用于打开特定的配置文件,而不是默认的app.config文件。

那么它们之间的区别是什么?何时使用哪个?

为什么我们在(1)和(2)中分隔 UserLevel 配置文件位置,但在(3)中将它们组合在一起?

感谢您的回复。

更新

我知道微软总是喜欢以多种方式做事。但它应该这样做是有原因的。在我的问题中,任何人都知道原因吗?我们需要赏金吗?)?

2 个答案:

答案 0 :(得分:35)

最终的.NET配置资源 - Cracking the Mysteries of .NET 2.0 Configuration

解释了这种差异

OpenExeConfiguration(String)

  

将“.config”附加到文件名   你提供并加载它   配置文件。这很重要   请注意OpenExeConfiguration(字符串   exePath)是一种非常误导的方法,   因为文件名不一定是   .exe的文件名   跑[...]   通过提供除。之外的文件名   EXE文件名,备用* .config   文件可以打开。

OpenExeConfiguration(ConfigurationUserLevel)

  

第二种方法,   OpenExeConfiguration(ConfigurationUserLevel   级别)将加载适当的   指定的配置文件   配置级别。组态   级别,在Exe上下文中可用,   允许您指定是否需要   exe,漫游用户或本地用户   配置[...]请记住,配置是分层的并且是合并的。请求漫游或本地用户配置时,将合并通过machine.config的级别,从而使应用程序可以访问给定用户级别的完整配置。

OpenMappedExeConfiguration(),OpenMappedMachineConfiguration()

  

与OpenExeConfiguration()不同   方法,制作几个   关于你的地方的假设   配置文件驻留,   OpenMappedExeConfiguration()和   OpenMappedMachineConfiguration()允许   你要明确指出你的位置   * .config文件驻留在磁盘上。使用这些方法,您可以加载   备用machine.config,加载   来自位置的User.config文件   你自己选择的(与让自己选择)   .NET框架决定一些   复杂的路径)等。访问时   machine.config,自定义版本是   不需要,   OpenMachineConfiguration()应该是   反而用了。

答案 1 :(得分:5)

OpenExeConfiguration (String)&之间的差异OpenMappedExeConfiguration (ExeConfigurationFileMap, ConfigurationUserLevel))是映射版本允许您使用ExeConfigurationFileMap选择要打开的配置文件。

如果您使用OpenExeConfiguration(string)重载,那么它将使用Machine和Exe配置位置打开配置,而映射版本将允许您从任何位置选择要加载的特定文件(显然仍然尊重权限,等)。

如果查看源代码,两种方法实际上都调用相同的实现方法:

public static System.Configuration.Configuration OpenMappedExeConfiguration(ExeConfigurationFileMap fileMap, ConfigurationUserLevel userLevel)
{
    return OpenExeConfigurationImpl(fileMap, false, userLevel, null);
}

public static System.Configuration.Configuration OpenExeConfiguration(string exePath)
{
    return OpenExeConfigurationImpl(null, false, ConfigurationUserLevel.None, exePath);
}

那么何时使用一个而不是另一个?如果您不想打开默认配置文件,请使用OpenMappedExeConfiguration。根据我的经验,我唯一一次调用这些方法之一就是当我想要读取非默认配置时,我只使用了OpenMappedExeConfiguration