簡體   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