Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Acción recomendada
- Si detectó excepciones de E/S desde
FileConfigurationProvidero un tipo derivado medianteTaskScheduler.UnobservedTaskException, mueva esa lógica a la devolución deOnLoadExceptionllamada. - Compruebe que cualquier devolución de llamada registrada en
OnLoadExceptionpuede controlar excepciones de cualquier tipo, no soloInvalidDataExceptionoFileNotFoundException. Evite conversiones incondicionales y use en su lugar la coincidencia de patrones o comprobaciones de tipos.