Partilhar via


APIs de globalização usam bibliotecas de UTI no Windows Server 2019

O .NET 7 e versões posteriores usam bibliotecas International Components for Unicode (ICU) para funcionalidade de globalização quando executadas no Windows Server 2019. As edições que não são de servidor do Windows usam a UTI desde o .NET 5. No entanto, o .NET 7 introduziu suporte para carregar ICU em versões anteriores do cliente Windows, especificamente as versões 1703, 1709, 1803 e 1809 do Windows 10.

Comportamento anterior

No .NET 5 e no .NET 6, as bibliotecas do .NET usavam APIs NLS (National Language Support) para a funcionalidade de globalização no Windows Server 2019. Por exemplo, as funções NLS foram usadas para comparar cadeias de caracteres, obter informações de cultura e executar invólucros de cadeia de caracteres na cultura apropriada. Esse comportamento também se aplica a versões de cliente do Windows 10, como 1703, 1709, 1803 e 1809.

Novo comportamento

A partir do .NET 7, se um aplicativo estiver sendo executado no Windows Server 2019 ou nas versões de cliente 1703, 1709, 1803 e 1809 do Windows 10, as bibliotecas do .NET usarão APIs de globalização da ICU , por padrão. (As versões não servidoras do Windows já usam a UTI desde o .NET 5, portanto, não há alteração para essas versões.)

Diferenças comportamentais

Você pode ver alterações em seu aplicativo mesmo que não perceba que está usando recursos de globalização. O exemplo a seguir mostra uma das mudanças comportamentais que você pode ver, mas há outras também.

Símbolo de moeda

Considere o código a seguir que formata uma cadeia de caracteres usando o especificador Cde formato de moeda . A cultura do segmento atual é definida como uma cultura que inclui apenas o idioma e não o país ou região.

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
  • No .NET 5 e .NET 6 no Windows Server 2019 ou Windows 10 versões de cliente 1703, 1709, 1803 e 1809, o valor do texto é "100,00 €".
  • No .NET 7 no Windows Server 2019 ou Windows 10 versões de cliente 1703, 1709, 1803 e 1809, o valor do texto é "100,00 ¤", que usa o símbolo de moeda internacional em vez do euro. Na UTI, o design é que uma moeda é uma propriedade de um país ou região, não um idioma.

Razão para a alteração

  • O .NET introduziu algumas APIs que dependem de bibliotecas de UTI, por exemplo, TimeZoneInfo.TryConvertIanaIdToWindowsId(String, String). Os usuários que queriam usar essas APIs no Windows Server 2019 precisavam implantar manualmente as bibliotecas da UTI com seus binários, usando o recurso Local do Aplicativo da ICU. Essa não foi uma ótima solução, porque o código pode estar em uma biblioteca que não pode controlar forçar bibliotecas de UTI a serem instaladas com qualquer aplicativo ou serviço que esteja usando a biblioteca.
  • Se o Windows Server 2019 for fornecido automaticamente por uma plataforma de nuvem (como o Azure), o serviço implantado não sabe necessariamente que será executado em tal servidor. Além disso, o proprietário do serviço tem que gerenciar se/quando implantar binários de UTI. Além disso, cada serviço implantado na nuvem usando o Windows Server 2019 que deseja usar as novas APIs dependentes da UTI do .NET precisa implantar os binários da UTI com o serviço. Isso pode aumentar o tamanho no disco no servidor.
  • Alguns usuários preferem usar a UTI por padrão porque ela está mais em conformidade com o padrão Unicode.

Versão introduzida

.NET 7

Se você estiver usando o .NET 7 nas versões de cliente 1703, 1709, 1803 ou 1809 do Windows Server 2019 ou Windows 10, recomendamos testar seu aplicativo ou serviço antes de enviá-lo para garantir que o comportamento seja o esperado e não interrompa nenhum usuário.

Se desejar continuar usando APIs de globalização NLS, você pode definir uma opção de tempo de execução para reverter para esse comportamento. Para obter mais informações sobre as opções disponíveis, consulte o artigo Globalização e UTI do .NET.

APIs afetadas

Consulte também