OpenExeConfiguration有2个重载:
OpenMappedExeConfiguration只有一个原型:
似乎(2)和(3)都可用于打开特定的配置文件,而不是默认的app.config文件。
那么它们之间的区别是什么?何时使用哪个?
为什么我们在(1)和(2)中分隔 UserLevel 和配置文件位置,但在(3)中将它们组合在一起?
感谢您的回复。
我知道微软总是喜欢以多种方式做事。但它应该这样做是有原因的。在我的问题中,任何人都知道原因吗?我们需要赏金吗?)?
答案 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
。