Callback fileConfigurationSource.OnLoadException wordt aangeroepen voor IO-fouten

FileConfigurationProvideren de afgeleide typen (gebruikt door <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*> en <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) stuurt nu I/O-fouten door naar de OnLoadException callback, naast parseringsfouten.

Geïntroduceerde versie

.NET 11 preview 7

Vorig gedrag

Eerder werden I/O-fouten die zijn opgetreden bij het openen van een configuratiebestand (bijvoorbeeld van AddJsonFile, AddXmlFile, AddIniFileof een herlaadbewerking geactiveerd wanneer een al geladen bestand op schijf is gewijzigd) niet doorgestuurd naar de FileLoadExceptionContext doorgegeven aan de OnLoadException callback. Alleen parseringsfouten zijn doorgestuurd naar die callback. I/O-fouten waren niet zichtbaar met behulp van OnLoadException; in plaats daarvan waren ze waarneembaar met behulp van UnobservedTaskException.

Als gevolg hiervan was de Exception eigenschap FileLoadExceptionContext waaraan is doorgegeven OnLoadException altijd een InvalidDataException of FileNotFoundException. Code die de uitzondering voorwaardelijke cast naar een van deze typen correct werkte.

Nieuw gedrag

Vanaf .NET 11 worden IO-fouten doorgestuurd naar de FileLoadExceptionContext doorgegeven aan de OnLoadException callback. IO-fouten kunnen niet meer worden waargenomen met behulp van TaskScheduler.UnobservedTaskException, behalve wanneer er geen OnLoadException callback is geregistreerd.

Als gevolg hiervan kan de Exception eigenschap FileLoadExceptionContext nu een uitzondering van elk type zijn, meestal IOException, maar mogelijk elke uitzondering die wordt gegenereerd door de geconfigureerde IFileProvider (inclusief aangepaste providers). Code waarmee de uitzondering InvalidDataException onvoorwaardelijke wordt omgezet of FileNotFoundException die deze nieuwe uitzonderingstypen op de achtergrond kan weggooien InvalidCastException .

Type van brekende verandering

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Deze wijziging is een foutoplossing. IO-fouten in het configuratiebestand zijn zinvolle laadfouten en code waarmee een OnLoadException callback wordt geregistreerd, verwacht dat alle fouten die optreden terwijl een configuratiebestand wordt geladen, niet alleen parseringsfouten worden waargenomen. Zie dotnet/runtime#113964 voor meer informatie.

  • Als u IO-uitzonderingen van FileConfigurationProvider of een afgeleid type hebt gedetecteerd met behulp TaskScheduler.UnobservedTaskExceptionvan, verplaatst u die logica naar de OnLoadException callback.
  • Controleer of een callback die is geregistreerd, OnLoadException uitzonderingen van elk type kan verwerken, niet alleen InvalidDataException of FileNotFoundException. Vermijd onvoorwaardelijke casts en gebruik in plaats daarvan patroonkoppelingen of typecontroles.

Betreffende API's