Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
FileConfigurationProvidere os seus tipos derivados (usados pela <Microsoft. Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile*>, <Microsoft. Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile*>, e <Microsoft. Extensions.Configuration.IniConfigurationExtensions.AddIniFile*>) agora encaminham erros de IO para o OnLoadException callback para além dos erros de parsing.
Versão introduzida
.NET 11 Pré-visualização 7
Comportamento anterior
Anteriormente, erros de IO que ocorriam quando um ficheiro de configuração era aberto (por exemplo, de AddJsonFile, AddXmlFile, AddIniFile, ou um recarregamento desencadeado quando um ficheiro já carregado era alterado no disco) não eram encaminhados para o FileLoadExceptionContext passado para o OnLoadException callback. Apenas erros de análise sintática eram encaminhados para esse callback. Os erros de E/S eram inobserváveis usando OnLoadException; em vez disso, eram observáveis usando UnobservedTaskException.
Como consequência, a Exception propriedade em FileLoadExceptionContext passado para OnLoadException foi sempre um InvalidDataException ou FileNotFoundException. O código que lançava incondicionalmente a exceção a um desses tipos funcionava corretamente.
Novo comportamento
A partir do .NET 11, os erros de IO são encaminhados para o FileLoadExceptionContext passado para o OnLoadException callback. Os erros de E/S já não são observáveis usando TaskScheduler.UnobservedTaskException, exceto quando não OnLoadException há callback registado.
Como consequência, a Exception propriedade em FileLoadExceptionContext pode agora ser uma exceção de qualquer tipo — mais frequentemente IOException, mas potencialmente qualquer exceção lançada pelo configurado IFileProvider (incluindo fornecedores personalizados). Código que lança incondicionalmente a exceção ou InvalidDataExceptionFileNotFoundException pode agora lançar ou InvalidCastException gerir silenciosamente mal estes novos tipos de exceções.
Tipo de mudança disruptiva
Esta mudança é uma mudança comportamental.
Motivo da mudança
Esta alteração é uma correção de bug. Erros de IO em ficheiros de configuração são falhas significativas de carregamento, e o código que regista um OnLoadException callback espera observar todas as falhas que ocorrem enquanto um ficheiro de configuração é carregado, não apenas erros de parsing. Para mais informações, consulte dotnet/runtime#113964.
Ação recomendada
- Se detetar exceções de IO de
FileConfigurationProviderou um tipo derivado usandoTaskScheduler.UnobservedTaskException, move essa lógica para oOnLoadExceptioncallback. - Verifique se qualquer callback registado em
OnLoadExceptionpode lidar com exceções de qualquer tipo, não apenasInvalidDataExceptionouFileNotFoundException. Evita lançamentos incondicionais e usa em vez disso correspondência de padrões ou verificações de tipo.