Se llama a la devolución de llamada FileConfigurationSource.OnLoadException para los errores de E/S.

FileConfigurationProvidery sus tipos derivados (usados por <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>, y <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) ahora reenvía los errores de E/S a la OnLoadException devolución de llamada además de analizar los errores.

Versión introducida

.NET 11 Preview 7

Comportamiento anterior

Anteriormente, los errores de E/S que se produjeron cuando se abrió un archivo de configuración (por ejemplo, desde AddJsonFile, AddXmlFileAddIniFileo una recarga desencadenada cuando un archivo ya cargado cambiaba en el disco) no se reenviaron al pasado a FileLoadExceptionContext la OnLoadException devolución de llamada. Solo se reenviaron errores de análisis a esa devolución de llamada. Los errores de E/S no eranobservibles mediante OnLoadException; en su lugar, eran observables mediante UnobservedTaskException.

Como consecuencia, la propiedad de FileLoadExceptionContext que se pasó a OnLoadException siempre era o FileNotFoundExceptionInvalidDataException .Exception Código que convierte incondicionalmente la excepción a uno de esos tipos funciona correctamente.

Nuevo comportamiento

A partir de .NET 11, los errores de E/S se reenvieron al pasado a FileLoadExceptionContext la devolución de OnLoadException llamada. Los errores de E/S ya no son observables mediante TaskScheduler.UnobservedTaskException, excepto cuando no se registra ninguna OnLoadException devolución de llamada.

Como consecuencia, la Exception propiedad de FileLoadExceptionContext ahora puede ser una excepción de cualquier tipo, normalmente IOException, pero potencialmente cualquier excepción producida por el configurado IFileProvider (incluidos los proveedores personalizados). Código que convierte incondicionalmente la excepción en InvalidDataException o FileNotFoundException ahora puede producir un InvalidCastException control incorrecto de estos nuevos tipos de excepción o de forma silenciosa.

Tipo de cambio disruptivo

Este es un cambio de comportamiento.

Motivo del cambio

Este cambio es una corrección de errores. Los errores de E/S del archivo de configuración son errores de carga significativos y el código que registra una OnLoadException devolución de llamada espera observar todos los errores que se producen mientras se carga un archivo de configuración, no solo los errores de análisis. Para obtener más información, vea dotnet/runtime#113964.

  • Si detectó excepciones de E/S desde FileConfigurationProvider o un tipo derivado mediante TaskScheduler.UnobservedTaskException, mueva esa lógica a la devolución de OnLoadException llamada.
  • Compruebe que cualquier devolución de llamada registrada en OnLoadException puede controlar excepciones de cualquier tipo, no solo InvalidDataException o FileNotFoundException. Evite conversiones incondicionales y use en su lugar la coincidencia de patrones o comprobaciones de tipos.

Las APIs afectadas