Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O .NET 7 e versões posteriores usam bibliotecas de ICU (Componentes Internacionais para Unicode) para funcionalidade de globalização ao serem executadas no Windows Server 2019. As edições não-servidor do Windows estão usando o ICU desde o .NET 5. No entanto, o .NET 7 introduziu suporte para carregar o ICU em versões anteriores de clientes Windows, especificamente as versões 1703, 1709, 1803 e 1809 do Windows.
Comportamento anterior
No .NET 5 e no .NET 6, as bibliotecas do .NET usavam APIs de NLS (National Language Support) 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 nas versões de cliente do Windows Server 2019 ou windows 10 1703, 1709, 1803 e 1809, as bibliotecas do .NET usam APIs de globalização da UTI , por padrão. (As versões não servidores do Windows já usam a UTI desde o .NET 5, portanto, não há nenhuma alteração para essas versões.)
Diferenças comportamentais
Você pode ver alterações em seu aplicativo mesmo se não perceber que está usando recursos de globalização. O exemplo a seguir mostra uma das alterações comportamentais que você pode ver, mas há outras também.
Símbolo da moeda
Considere o código a seguir que formata uma cadeia de caracteres usando o especificador Cde formato de moeda. 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 Windows 10 versões cliente 1703, 1709, 1803 e 1809, o valor do texto é
"100,00 €". - No .NET 7 no Windows Server 2019 ou Windows 10 nas 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. No ICU, o conceito é que uma moeda é uma propriedade de um país ou região, não de um idioma.
Motivo da alteração
- .NET introduziu algumas APIs que dependem de bibliotecas 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 UTI com seus binários, usando o recurso Local do Aplicativo de UTI. Essa não foi uma ótima solução, pois o código pode estar em uma biblioteca que não pode controlar ou forçar que as bibliotecas ICU sejam instaladas por 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 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 UTI. Além disso, todos os serviços implantados na nuvem usando o Windows Server 2019 que querem utilizar as novas APIs dependentes da ICU do .NET precisam implantar os binários da ICU com o serviço. Isso pode aumentar o tamanho no disco do servidor.
- Alguns usuários preferem usar a UTI por padrão porque ela está em conformidade com o Padrão Unicode.
Versão introduzida
.NET 7
Ação recomendada
Se você estiver usando o .NET 7 no Windows Server 2019 ou windows 10 versões de cliente 1703, 1709, 1803 ou 1809, 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 você quiser continuar usando APIs de globalização do NLS, poderá definir uma opção de runtime 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
- System.Span<T>
- System.String
- A maioria dos tipos no namespace System.Globalization
- System.Array.Sort (ao classificar uma matriz de cadeias de caracteres)
- System.Collections.Generic.List<T>.Sort() (quando os elementos de lista são cadeias de caracteres)
- System.Collections.Generic.SortedDictionary<TKey,TValue> (quando as chaves são cadeias de caracteres)
- System.Collections.Generic.SortedList<TKey,TValue> (quando as chaves são cadeias de caracteres)
- System.Collections.Generic.SortedSet<T> (quando o conjunto contém cadeias de caracteres)