FileConfigurationSource.OnLoadException-återanrop anropas för I/O-fel

FileConfigurationProvideroch dess härledda typer (används av <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>, och <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*) vidarebefordrar nu I/O-fel> till återanropet OnLoadException utöver parsningsfel.

Version lanserad

.NET 11 Förhandsversion 7

Tidigare beteende

Tidigare vidarebefordrades inte I/O-fel som uppstod när en konfigurationsfil öppnades (till exempel från , , eller en ny inläsning som utlöstes när en redan inläst fil ändrades på disken) till motringningen FileLoadExceptionContextOnLoadException. AddIniFileAddXmlFileAddJsonFile Endast parsningsfel vidarebefordrades till återanropet. I/O-fel kunde inte observeras med hjälp av OnLoadException. I stället kunde de observeras med hjälp av UnobservedTaskException.

Som en följd av detta var egenskapen FileLoadExceptionContext som Exception vidarebefordrades till OnLoadException alltid en InvalidDataException eller FileNotFoundException. Kod som villkorslöst omvandlar undantaget till en av dessa typer fungerade korrekt.

Nytt beteende

Från och med .NET 11 vidarebefordras I/O-fel till motringningen FileLoadExceptionContextOnLoadException. I/O-fel kan inte längre observeras med hjälp av TaskScheduler.UnobservedTaskException, förutom när inga OnLoadException återanrop har registrerats.

Exception Därför kan egenskapen på FileLoadExceptionContext nu vara ett undantag av alla typer – oftast IOException, men eventuellt alla undantag som genereras av de konfigurerade IFileProvider (inklusive anpassade leverantörer). Kod som villkorslöst kastar undantaget till InvalidDataException eller FileNotFoundException kan nu utlösa en InvalidCastException eller tyst felhandle dessa nya undantagstyper.

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

Den här ändringen är en felkorrigering. Konfigurationsfilens I/O-fel är meningsfulla belastningsfel, och kod som registrerar ett OnLoadException återanrop förväntar sig att observera alla fel som inträffar när en konfigurationsfil läses in, inte bara parsningsfel. Mer information finns i dotnet/runtime#113964.

  • Om du har identifierat I/O-undantag från FileConfigurationProvider eller en härledd typ med hjälp av TaskScheduler.UnobservedTaskExceptionflyttar du logiken till återanropet OnLoadException .
  • Kontrollera att alla motringningar som är registrerade i OnLoadException kan hantera undantag av alla typer, inte bara InvalidDataException eller FileNotFoundException. Undvik ovillkorliga kast och använd mönstermatchning eller typkontroller i stället.

Berörda API:er