Compartilhar via


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

O .NET 7 e versões posteriores usam bibliotecas de ICU (International Components for Unicode) para funcionalidade de globalização ao serem executadas no Windows Server 2019. As edições sem servidor do Windows têm usado o ICU desde o .NET 5. No entanto, o .NET 7 introduziu o suporte para carregar o ICU em versões anteriores do cliente Windows, especificamente nas versões 1703, 1709, 1803 e 1809 do Windows 10.

Comportamento anterior

No .NET 5 e no .NET 6, as bibliotecas .NET usaram APIs de National Language Support (NLS) para 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 maiúsculas e minúsculas 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 em execução no Windows Server 2019 ou nas versões 1703, 1709, 1803 e 1809 do cliente Windows 10, as bibliotecas .NET usarão APIs de globalização do ICU por padrão. (As versões não Windows Server já usam ICU desde o .NET 5, portanto, não há nenhuma alteração para essas versões.)

Diferenças de comportamento

Você pode ver alterações em seu aplicativo mesmo que não perceba que está usando instalações de globalização. Esta seção lista uma das alterações de comportamento 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 de formato de moeda C. A cultura do thread 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 no .NET 6 no Windows Server 2019 ou nas versões 1703, 1709, 1803 e 1809 do cliente Windows 10, o valor de texto é "100,00 €".
  • No .NET 7 no Windows Server 2019 ou nas versões 1703, 1709, 1803 e 1809 do cliente Windows 10, o valor do texto é "100,00 ¤", que usa o símbolo de moeda internacional em vez do euro. Na ICU, o design é que uma moeda é uma propriedade de um país ou região, não um idioma.

Motivo da alteração

  • O .NET introduziu algumas APIs que dependem de bibliotecas de ICU, por exemplo, TimeZoneInfo.TryConvertIanaIdToWindowsId(String, String). Os usuários que queriam usar essas APIs no Windows Server 2019 eram obrigados a implantar manualmente bibliotecas de ICU com seus binários, usando o recurso Local do Aplicativo de ICU. Essa não foi uma ótima solução, pois o código pode estar em uma biblioteca que não pode controlar forçar bibliotecas de ICU 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 Azure), o serviço implantado não necessariamente saberá que ele será executado nesse servidor. Além disso, o proprietário do serviço precisa gerenciar se/quando implantar binários de ICU. Além disso, todos os serviços implantados na nuvem usando o Windows Server 2019 que desejam usar as novas APIs dependentes de ICU do .NET precisam implantar os binários de ICU com o serviço. Isso pode sobrecarregar o tamanho no disco no servidor.
  • Alguns usuários preferem usar ICU 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 no Windows Server 2019 ou nas versões 1703, 1709, 1803 ou 1809 do cliente Windows 10, recomendamos testar seu aplicativo ou serviço antes de enviá-lo para garantir que o comportamento seja o esperado e não prejudique nenhum usuário.

Se você quiser continuar usando APIs de globalização de NLS, poderá 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 sobre globalização e ICU do .NET .

APIs afetadas

Confira também