[英]Configuration.GetSection returns a ConfigurationSection that doesn't exists in the file
我正在使用包含以下行的 .NET 框架应用程序:
var configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
Console.WriteLine(configuration.FilePath);
var mySettings = (MySettings) configuration.GetSection("MySettings");
它打印以下路径:
C:\Users\Daniel Jonsson\AppData\Local\MyCompany\MyApp.exe_Url_ib5gv4f20ng5kujpcanm3fusbnakfvor\1.0.0.0\user.config
但是,该文件不包含部分MySettings
。 相反,正在读取的MySettings
部分位于C:\code\MyCompany\MyApp\bin\Debug\MyApp.exe.config
的 program's.config 文件中。
控制此行为的配置文件之间是否存在某种 inheritance? 或者为什么它会这样? 我希望它读取user.config
文件中的任何内容。
显然, Configuration
class 表示来自所有配置文件的配置设置的合并视图,根据此来源:
配置设置存储在配置文件的层次结构中。 配置 class 实例表示来自所有配置文件的配置设置的合并视图,这些配置文件适用于特定物理实体(例如计算机)或逻辑实体(例如应用程序或 Web 站点)。 逻辑实体可以存在于本地计算机或远程服务器上。 有关配置文件的信息,请参阅配置应用程序和 ASP.NET 配置文件。
根据此来源,层次结构如下:
Machine.config
>[AppName.exe.config]
>Roaming.config
>User.config
当使用ConfigurationUserLevel.PerUserRoamingAndLocal
时,它将合并所有这些级别,根据上一个源的这一部分:
请记住,配置是分层和合并的。 当请求漫游或本地用户配置时,通过 machine.config 升级的级别会被合并,从而得到您的应用程序可以访问给定用户级别的完整配置。 这种合并的一个有趣结果是,即使 User.config 文件不存在,您也可以请求漫游或本地用户配置。 返回的配置 object 将包含一个不存在的 FilePath,并且 HasFile 属性将为 false。 任何在更高配置级别中定义的部分仍然可以访问,并且在适当的允许下,可以保存对这些部分的更改。 在以前不存在的级别保存更改将创建相应的 User.config 文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.