Il callback FileConfigurationSource.OnLoadException viene chiamato per gli errori di I/O

FileConfigurationProvidere i relativi tipi derivati (usati da <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>e <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) inoltra ora gli errori di I/O al callback oltre all'analisi OnLoadException degli errori.

Versione introdotta

.NET 11 Preview 7

Comportamento precedente

In precedenza, gli errori di I/O che si sono verificati durante l'apertura di un file di configurazione (ad esempio, da AddJsonFile, AddIniFileAddXmlFile, o un ricaricamento attivato quando un file già caricato sul disco) non venivano inoltrati all'oggetto FileLoadExceptionContext passato al OnLoadException callback. Solo gli errori di analisi sono stati inoltrati a tale callback. Gli errori di I/O non sono stati osservabili usando OnLoadException; invece, erano osservabili usando UnobservedTaskException.

Di conseguenza, la Exception proprietà su FileLoadExceptionContext passato a OnLoadException è sempre un InvalidDataException oggetto o FileNotFoundException. Codice che esegue il cast incondizionato dell'eccezione a uno di questi tipi funziona correttamente.

Nuovo comportamento

A partire da .NET 11, gli errori di I/O vengono inoltrati al FileLoadExceptionContext metodo passato al OnLoadException callback. Gli errori di I/O non sono più osservabili tramite TaskScheduler.UnobservedTaskException, tranne quando non viene registrato alcun OnLoadException callback.

Di conseguenza, la Exception proprietà su FileLoadExceptionContext può ora essere un'eccezione di qualsiasi tipo, in IOExceptiongenere , ma potenzialmente qualsiasi eccezione generata dall'oggetto configurato IFileProvider (inclusi i provider personalizzati). Il codice che esegue il cast in modo incondizionato dell'eccezione a InvalidDataException o FileNotFoundException può ora generare un errore InvalidCastException o in modo invisibile all'utente per questi nuovi tipi di eccezione.

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

Questa modifica è una correzione di bug. Gli errori di I/O dei file di configurazione sono errori di carico significativi e il codice che registra un OnLoadException callback prevede di osservare tutti gli errori che si verificano durante il caricamento di un file di configurazione, non solo l'analisi degli errori. Per altre informazioni, vedere dotnet/runtime#113964.

  • Se sono state rilevate eccezioni di I/O da FileConfigurationProvider o da un tipo derivato usando TaskScheduler.UnobservedTaskException, spostare tale logica nel OnLoadException callback.
  • Verificare che qualsiasi callback registrato in OnLoadException possa gestire le eccezioni di qualsiasi tipo, non solo InvalidDataException o FileNotFoundException. Evitare cast non condizionali e usare invece controlli di criteri o tipi.

Le API interessate