Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Action recommandée
- 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 leOnLoadExceptionrappel. - Vérifiez que tout rappel inscrit
OnLoadExceptiondans peut gérer des exceptions de tout type, pas seulementInvalidDataExceptionouFileNotFoundException. Évitez les casts inconditionnels et utilisez plutôt des vérifications de modèle ou de type.