繁体   English   中英

Configuration.GetSection 返回文件中不存在的 ConfigurationSection

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM