Wywołanie zwrotne fileConfigurationSource.OnLoadException jest wywoływane w przypadku błędów we/wy

FileConfigurationProvideri jego typy pochodne (używane przez <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*> i <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) przekazuje teraz błędy we/wy do OnLoadException wywołania zwrotnego oprócz analizowania błędów.

Wersja wprowadzona

.NET 11 (wersja zapoznawcza 7)

Poprzednie zachowanie

Wcześniej błędy we/wy, które wystąpiły po otwarciu pliku konfiguracji (na przykład z AddJsonFile, AddXmlFile, AddIniFilelub ponownego załadowania, gdy plik załadowany został zmieniony na dysku) nie zostały przekazane do FileLoadExceptionContextOnLoadException wywołania zwrotnego. Tylko błędy analizowania zostały przekazane do tego wywołania zwrotnego. Błędy we/wy były nieobserwowalne przy użyciu metody OnLoadException; zamiast tego można je zaobserwować przy użyciu metody UnobservedTaskException.

W konsekwencji Exception właściwość przekazana OnLoadException zawsze była właściwością InvalidDataException lub FileNotFoundExceptionFileLoadExceptionContext . Kod, który bezwarunkowo rzutuje wyjątek na jeden z tych typów, działał prawidłowo.

Nowe zachowanie

Począwszy od .NET 11, błędy we/wy są przekazywane do przekazanego FileLoadExceptionContext wywołania zwrotnegoOnLoadException. Błędy we/wy nie są już widoczne przy użyciu metody TaskScheduler.UnobservedTaskException, z wyjątkiem sytuacji, gdy nie OnLoadException zarejestrowano wywołania zwrotnego.

W związku Exception z tym właściwość on FileLoadExceptionContext może być teraz wyjątkiem dowolnego typu — najczęściej IOException, ale potencjalnie każdy wyjątek zgłaszany przez skonfigurowany IFileProvider (w tym dostawców niestandardowych). Kod, który bezwarunkowo rzuca wyjątek lub InvalidDataExceptionFileNotFoundException może teraz zgłaszać InvalidCastException lub dyskretnie błędnie pracować z tymi nowymi typami wyjątków.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Ta zmiana jest poprawką błędów. Błędy we/wy pliku konfiguracji są znaczącymi błędami ładowania, a kod rejestrujący OnLoadException wywołanie zwrotne oczekuje obserwowania wszystkich błędów występujących podczas ładowania pliku konfiguracji, a nie tylko analizowania błędów. Aby uzyskać więcej informacji, zobacz dotnet/runtime#113964.

  • Jeśli wykryto wyjątki we/wy z FileConfigurationProvider lub typu pochodnego przy użyciu TaskScheduler.UnobservedTaskExceptionmetody , przenieś logikę do wywołania zwrotnego OnLoadException .
  • Sprawdź, czy wszystkie wywołania zwrotne zarejestrowane w programie OnLoadException mogą obsługiwać wyjątki dowolnego typu, a nie tylko InvalidDataException lub FileNotFoundException. Unikaj rzutów bezwarunkowych i zamiast tego używaj dopasowywania wzorców lub kontroli typów.

Interfejsy API, których dotyczy problem