O callback FileConfigurationSource.OnLoadException é chamado para erros de IO

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.

  • Se detetar exceções de IO de FileConfigurationProvider ou um tipo derivado usando TaskScheduler.UnobservedTaskException, move essa lógica para o OnLoadException callback.
  • Verifique se qualquer callback registado em OnLoadException pode lidar com exceções de qualquer tipo, não apenas InvalidDataException ou FileNotFoundException. Evita lançamentos incondicionais e usa em vez disso correspondência de padrões ou verificações de tipo.

APIs afetadas