Udostępnij za pośrednictwem


Interfejsy API globalizacji używają bibliotek ICU w systemie Windows Server 2019

Program .NET 7 i nowsze wersje używają bibliotek International Components for Unicode (ICU) na potrzeby funkcji globalizacji podczas uruchamiania w systemie Windows Server 2019. Wersje nienależące do serwera systemu Windows korzystają z funkcji ICU od platformy .NET 5. Jednak platforma .NET 7 wprowadziła obsługę ładowania ICU we wcześniejszych wersjach klienta systemu Windows, w szczególności systemu Windows 10 w wersji 1703, 1709, 1803 i 1809.

Poprzednie zachowanie

W programach .NET 5 i .NET 6 biblioteki .NET używały interfejsów API obsługi języka narodowego (NLS) na potrzeby funkcji globalizacji w systemie Windows Server 2019. Na przykład funkcje NLS były używane do porównywania ciągów, pobierania informacji o kulturze i wykonywania wielkości liter ciągów w odpowiedniej kulturze. To zachowanie dotyczy również wersji klienta systemu Windows 10, takich jak 1703, 1709, 1803 i 1809.

Nowe zachowanie

Począwszy od platformy .NET 7, jeśli aplikacja jest uruchomiona w systemie Windows Server 2019 lub Windows 10 w wersji 1703, 1709, 1803 i 1809, biblioteki platformy .NET domyślnie używają interfejsów API globalizacji ICU . (Wersje systemu Windows nienależące do serwera korzystają już z funkcji ICU od platformy .NET 5, więc nie ma żadnych zmian w tych wersjach).

Różnice behawioralne

Zmiany w aplikacji mogą być widoczne, nawet jeśli nie zdajesz sobie sprawy, że używasz obiektów globalizacji. W poniższym przykładzie pokazano jedną ze zmian behawioralnych, które można zobaczyć, ale są też inne.

Symbol waluty

Rozważ następujący kod, który formatuje ciąg przy użyciu specyfikatora Cformatu waluty . Kultura bieżącego wątku jest ustawiona na kulturę obejmującą tylko język, a nie kraj lub region.

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
  • W programach .NET 5 i .NET 6 w systemie Windows Server 2019 lub Windows 10 w wersjach 1703, 1709, 1803 i 1809 wartość tekstu to "100,00 €".
  • W programie .NET 7 w systemie Windows Server 2019 lub Windows 10 w wersji 1703, 1709, 1803 i 1809 wartość tekstu to "100,00 ¤", która używa symbolu waluty międzynarodowej zamiast euro. W ICU projekt polega na tym, że waluta jest właściwością kraju lub regionu, a nie języka.

Przyczyna wprowadzenia zmiany

  • Platforma .NET wprowadziła niektóre interfejsy API, które zależą od bibliotek ICU, na przykład TimeZoneInfo.TryConvertIanaIdToWindowsId(String, String). Użytkownicy, którzy chcieli używać takich interfejsów API w systemie Windows Server 2019, musieli ręcznie wdrożyć biblioteki ICU przy użyciu ich plików binarnych przy użyciu funkcji lokalnej aplikacji ICU. Nie było to doskonałe rozwiązanie, ponieważ kod może znajdować się w bibliotece, która nie może kontrolować wymuszania instalowania bibliotek ICU przy użyciu dowolnej aplikacji lub usługi przy użyciu biblioteki.
  • Jeśli system Windows Server 2019 jest automatycznie dostarczany przez platformę w chmurze (na przykład platformę Azure), wdrożona usługa nie musi wiedzieć, że będzie działać na takim serwerze. Ponadto właściciel usługi musi zarządzać if/when, aby wdrożyć pliki binarne ICU. Ponadto każda usługa wdrożona w chmurze przy użyciu systemu Windows Server 2019, która chce korzystać z nowych interfejsów API zależnych od ICU platformy .NET, musi wdrożyć pliki binarne ICU w usłudze. Może to wdęć rozmiar dysku na serwerze.
  • Niektórzy użytkownicy wolą domyślnie używać ICU, ponieważ jest on zgodny z standardem Unicode.

Wprowadzona wersja

.NET 7

Jeśli używasz platformy .NET 7 w systemie Windows Server 2019 lub Windows 10 w wersji 1703, 1709, 1803 lub 1809, zalecamy przetestowanie aplikacji lub usługi przed jej wysyłką, aby upewnić się, że zachowanie jest zgodnie z oczekiwaniami i nie przerywa żadnych użytkowników.

Jeśli chcesz nadal korzystać z interfejsów API globalizacji nlS, możesz ustawić przełącznik czasu wykonywania, aby przywrócić to zachowanie. Aby uzyskać więcej informacji na temat dostępnych przełączników, zobacz artykuł Globalizacja platformy .NET i ICU .

Dotyczy interfejsów API

Zobacz też