FileConfigurationProviderおよびその派生型 (<Microsoftによって使用されます。Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft.Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>、および<Microsoft。Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) は、解析エラーに加えて、IO エラーを OnLoadException コールバックに転送するようになりました。
導入されたバージョン
.NET 11 Preview 7
以前の動作
以前は、構成ファイルが開かれたときに発生した IO エラー (たとえば、AddJsonFile、AddXmlFile、AddIniFile、ディスクに既に読み込まれているファイルが変更されたときにトリガーされた再読み込み) は、OnLoadException コールバックに渡されたFileLoadExceptionContextに転送されませんでした。 解析エラーのみがそのコールバックに転送されました。 IO エラーは、 OnLoadExceptionを使用して観察できませんでした。代わりに、 UnobservedTaskExceptionを使用して監視できます。
その結果、OnLoadExceptionに渡されるFileLoadExceptionContextのExceptionプロパティは常にInvalidDataExceptionまたはFileNotFoundExceptionでした。 例外をこれらの型のいずれかに無条件にキャストするコードが正しく機能しました。
新しい動作
.NET 11 以降では、IO エラーは、OnLoadException コールバックに渡されたFileLoadExceptionContextに転送されます。
OnLoadExceptionコールバックが登録されていない場合を除き、io エラーは TaskScheduler.UnobservedTaskException を使用して監視できなくなりました。
その結果、FileLoadExceptionContextのExceptionプロパティは、任意の型の例外になる可能性があります。最も一般的にIOExceptionが、構成されたIFileProvider (カスタム プロバイダーを含む) によってスローされる可能性のある例外です。 無条件に例外を InvalidDataException または FileNotFoundException にキャストするコードは、 InvalidCastException をスローしたり、これらの新しい例外の種類を暗黙的に誤って処理したりできるようになりました。
破壊的変更の種類
この変更は 動作の変更です。
変更理由
この変更はバグ修正です。 構成ファイルの IO エラーは意味のある読み込みエラーであり、 OnLoadException コールバックを登録するコードは、エラーの解析だけでなく、構成ファイルの読み込み中に発生するすべてのエラーを観察することを想定しています。 詳細については、「 dotnet/runtime#113964」を参照してください。
推奨されるアクション
-
TaskScheduler.UnobservedTaskExceptionを使用してFileConfigurationProviderまたは派生型からの IO 例外を検出した場合は、そのロジックをOnLoadExceptionコールバックに移動します。 -
OnLoadExceptionに登録されているコールバックが、InvalidDataExceptionやFileNotFoundExceptionだけでなく、任意の型の例外を処理できることを確認します。 無条件キャストを避け、代わりにパターン マッチングまたは型チェックを使用します。
影響を受ける API
.NET