Tworzenie kultury i mapowanie wielkości liter w trybie niezmiennym globalizacji
Ta zmiana powodująca niezgodność wpływa na niezmienny tryb globalizacji na dwa sposoby:
- Wcześniej platforma .NET zezwalała na tworzenie dowolnej kultury w trybie niezmiennym globalizacji, o ile nazwa kultury jest zgodna z BCP-47. Jednak niezmienne dane kultury były używane zamiast rzeczywistych danych kultury. Począwszy od platformy .NET 6, zgłaszany jest wyjątek, jeśli tworzysz dowolną kulturę inną niż niezmienna kultura w trybie niezmiennym globalizacji.
- Wcześniej niezmienny tryb globalizacji obsługiwał tylko mapowanie wielkości liter dla znaków ASCII. Począwszy od platformy .NET 6, niezmienny tryb globalizacji zapewnia pełną obsługę mapowania liter dla wszystkich znaków zdefiniowanych w formacie Unicode. Mapowanie wielkości liter jest używane w operacjach, takich jak porównania ciągów, wyszukiwanie ciągów i ciągi wielkości liter lub dolne.
Niezmienny tryb globalizacji jest używany w przypadku aplikacji, które nie wymagają żadnej obsługi globalizacji. Oznacza to, że aplikacja działa bez dostępu do danych i zachowań specyficznych dla kultury. Tryb niezmienny globalizacji jest domyślnie włączony w niektórych kontenerach platformy Docker, na przykład w kontenerach Alpine.
Stare zachowanie
W poprzednich wersjach platformy .NET, gdy jest włączony tryb niezmienny globalizacji:
Jeśli aplikacja tworzy kulturę, która nie jest niezmienną kulturą, operacja powiedzie się, ale zwracana kultura zawsze używa niezmiennych danych kultury zamiast rzeczywistych danych kultury.
Mapowanie wielkości liter zostało wykonane tylko dla znaków ASCII. Na przykład:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
Nowe zachowanie
Począwszy od platformy .NET 6, gdy jest włączony tryb niezmienny globalizacji:
Jeśli aplikacja próbuje utworzyć kulturę, która nie jest niezmienną kulturą, zgłaszany CultureNotFoundException jest wyjątek.
Mapowanie wielkości liter jest wykonywane dla wszystkich znaków zdefiniowanych w formacie Unicode. Na przykład:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
Wprowadzona wersja
.NET 6
Przyczyna wprowadzenia zmiany
Zmiana tworzenia kultury została wprowadzona w celu łatwiejszego diagnozowania problemów związanych z kulturą. Niektórzy użytkownicy nie wiedzą, że ich aplikacje działają w środowisku, w którym jest włączony tryb niezmienny globalizacji. Mogą one napotkać nieoczekiwane zachowanie i nie sprawiają, że skojarzenie z trybem niezmiennym globalizacji, więc trudno zdiagnozować problem.
Pełna obsługa mapowania przypadków została wprowadzona w celu zapewnienia lepszej użyteczności i doświadczenia w trybie niezmiennym globalizacji.
Zalecana akcja
W większości przypadków nie jest wymagana żadna akcja. Jeśli jednak chcesz, aby poprzednie zachowanie tworzenia kultury było pożądane, możesz ustawić opcję konfiguracji środowiska uruchomieniowego, aby umożliwić tworzenie dowolnej kultury w trybie niezmiennym globalizacji. Aby uzyskać więcej informacji, zobacz Wstępnie zdefiniowane kultury.
Dotyczy interfejsów API
- CultureInfo
- System.Globalization.CultureInfo.CreateSpecificCulture(String)
- System.Globalization.CultureInfo.GetCultureInfo
- RegionInfo
- Wszystkie interfejsy API, które wykonują wielkość liter, porównanie lub wyszukiwanie ciągów