Criação de cultura e mapeamento de maiúsculas e minúsculas no modo invariável de globalização

Essa alteração interruptiva afeta o modo invariável de globalização de duas maneiras:

  • Anteriormente, o .NET permitia que qualquer cultura fosse criada no modo invariável de globalização, desde que o nome da cultura estivesse em conformidade com o BCP-47. No entanto, eram usados os dados de cultura invariáveis em vez dos dados de cultura reais. A partir do .NET 6, uma exceção será gerada se você criar uma cultura diferente da cultura invariável no modo invariável de globalização.
  • Anteriormente, o modo invariável de globalização só tinha suporte para mapeamento de maiúsculas e minúsculas para caracteres ASCII. A partir do .NET 6, o modo invariável de globalização fornece suporte completo de mapeamento de maiúsculas e minúsculas para todos os caracteres definidos por Unicode. O mapeamento de maiúsculas e minúsculas é usado em operações como comparações de cadeias de caracteres, pesquisas de cadeia de caracteres e cadeias de caracteres em maiúsculas ou minúsculas.

O modo de globalização invariável é usado em aplicativos que não exigem suporte à globalização. Ou seja, o aplicativo é executado sem acesso a dados e comportamentos específicos da cultura. O modo de globalização invariável é habilitado por padrão em alguns contêineres do Docker, por exemplo, contêineres Alpine.

Comportamento antigo

Nas versões anteriores do .NET, quando o modo invariável de globalização está habilitado:

  • Se um aplicativo cria uma cultura que não é a cultura invariável, a operação é bem-sucedida, mas a cultura retornada sempre usa os dados de cultura invariáveis em vez dos dados de cultura reais.

  • O mapeamento de maiúsculas e minúsculas era executado apenas para caracteres ASCII. Por exemplo:

    if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
    

Novo comportamento

A partir do .NET 6, quando o modo invariável de globalização está habilitado:

  • Se um aplicativo tentar criar uma cultura que não seja a cultura invariável, uma exceção CultureNotFoundException será gerada.

  • O mapeamento de maiúsculas e minúsculas é executado para todos os caracteres definidos por Unicode. Por exemplo:

    if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
    

Versão introduzida

.NET 6

Motivo da alteração

A mudança de criação de cultura foi implementada para diagnosticar mais facilmente problemas relacionados à cultura. Alguns usuários não sabem que seus aplicativos estão em execução em um ambiente em que o modo invariável de globalização está habilitado. Eles podem presenciar um comportamento inesperado e não fazer a associação com o modo invariável de globalização, tornando difícil diagnosticar o problema.

O suporte completo de mapeamento de maiúsculas e minúsculas foi introduzido para melhor usabilidade e experiência no modo invariável de globalização.

Na maioria dos casos, nenhuma ação é necessária. No entanto, caso deseje ter o comportamento anterior de criação de cultura, você poderá definir uma opção de configuração de runtime para permitir a criação de qualquer cultura no modo invariável de globalização. Para obter mais informações, confira Culturas predefinidas.

APIs afetadas

Confira também