FileConfigurationSource.OnLoadException 回調用於 IO 錯誤

FileConfigurationProvider以及其衍生型別(由 <Microsoft 使用)。Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft.Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>,以及 <Microsoft。Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>)現在除了解析錯誤外,還會將 IO 錯誤轉發回調。OnLoadException

所推出的版本

.NET 11 預覽版 7

以前的行為

過去,當開啟設定檔時發生的 IO 錯誤(例如AddJsonFile來自 、 AddXmlFile、 AddIniFile,或當磁碟上已載入的檔案被更改時觸發的重新載入)不會轉發給回FileLoadExceptionContextOnLoadException調。 只有解析錯誤會被轉發到該回調。 IO 錯誤無法透過 OnLoadException觀察;相反地,它們是可 UnobservedTaskException透過 觀察到的。

因此,Exception傳遞到 OnLoadException 的性質FileLoadExceptionContext總是 InvalidDataExceptionFileNotFoundException或 。 無條件將例外投射到上述類型之一的程式碼是正常運作的。

新行為

從 .NET 11 開始,IO 錯誤會轉發給FileLoadExceptionContext傳回回撥。OnLoadException IO 錯誤不再可透過 TaskScheduler.UnobservedTaskException觀察到 ,除非沒有 OnLoadException 回撥被登錄。

因此, Exception 屬性 現在 FileLoadExceptionContext 可以是任何類型的例外——最常見 IOException的是,但也可能是由配置 IFileProvider 者拋出的任何例外(包括自訂提供者)。 程式碼會無條件投放例外, InvalidDataException 或 FileNotFoundException 現在可以拋出 , InvalidCastException 或默默誤處理這些新例外類型。

破壞性變更的類型

此變更為行為變更。

變更原因

這項變更是錯誤修正。 組態檔案 IO 錯誤是有意義的載入失敗,註冊回調的程式碼 OnLoadException 期望觀察設定檔載入過程中發生的所有故障,而非僅僅解析錯誤。 更多資訊請參見 dotnet/runtime#113964。

  • 如果你用 偵測到 IO 異常FileConfigurationProvider或派生型別TaskScheduler.UnobservedTaskException的異常,就把該邏輯移到回調。OnLoadException
  • 確認任何註冊在 的 OnLoadException 回調都能處理任何類型的例外,而非僅僅是 InvalidDataException 或 FileNotFoundException。 避免無條件施放,改用模式匹配或類型檢查。

受影響的 API