Le rappel FileConfigurationSource.OnLoadException est appelé pour les erreurs d’E/S

FileConfigurationProvideret ses types dérivés (utilisés par <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>, et <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) transfère désormais les erreurs d’E/S au OnLoadException rappel en plus des erreurs d’analyse.

Version introduite

.NET 11 Preview 7

Comportement antérieur

Auparavant, les erreurs d’E/S qui se sont produites lorsqu’un fichier de configuration a été ouvert (par exemple, à partir de AddJsonFile, AddIniFileAddXmlFileou un rechargement déclenché lorsqu’un fichier déjà chargé a été modifié sur le disque) n’a pas été transféré au FileLoadExceptionContextOnLoadException rappel passé. Seules les erreurs d’analyse ont été transférées à ce rappel. Les erreurs d’E/S étaient inobservables à l’aide OnLoadException; à la place, elles étaient observables à l’aide UnobservedTaskExceptionde .

Par conséquent, la Exception propriété sur FileLoadExceptionContext transmise OnLoadException était toujours une InvalidDataException ou FileNotFoundException. Code qui caste inconditionnellement l’exception sur l’un de ces types fonctionne correctement.

Nouveau comportement

À compter de .NET 11, les erreurs d’E/S sont transférées au FileLoadExceptionContext rappel passéOnLoadException. Les erreurs d’E/S ne sont plus observables à l’aide TaskScheduler.UnobservedTaskException, sauf lorsqu’aucun rappel n’est OnLoadException inscrit.

Par conséquent, la Exception propriété activée FileLoadExceptionContext peut désormais être une exception de n’importe quel type, IOExceptionmais potentiellement toute exception levée par le fournisseur configuré IFileProvider (y compris les fournisseurs personnalisés). Code qui caste inconditionnellement l’exception vers InvalidDataException ou FileNotFoundException peut maintenant lever un InvalidCastException ou une mauvaise gestion silencieuse de ces nouveaux types d’exceptions.

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Cette modification est un correctif de bogue. Les erreurs d’E/S du fichier de configuration sont des échecs de charge significatifs et le code qui inscrit un OnLoadException rappel s’attend à observer tous les échecs qui se produisent pendant le chargement d’un fichier de configuration, et non pas seulement par l’analyse des erreurs. Pour plus d’informations, consultez dotnet/runtime#113964.

  • Si vous avez détecté des exceptions d’E/S à partir d’un type dérivé ou à l’aide FileConfigurationProviderTaskScheduler.UnobservedTaskExceptiond’un type dérivé, déplacez cette logique vers le OnLoadException rappel.
  • Vérifiez que tout rappel inscrit OnLoadException dans peut gérer des exceptions de tout type, pas seulement InvalidDataException ou FileNotFoundException. Évitez les casts inconditionnels et utilisez plutôt des vérifications de modèle ou de type.

API affectées