Creazione delle impostazioni cultura e mapping di maiuscole e minuscole in modalità invariante di globalizzazione
Questa modifica che causa un'interruzione influisce sulla modalità invariante globalizzazione in due modi:
- In precedenza, .NET consentiva la creazione di impostazioni cultura in modalità invariante di globalizzazione, purché il nome delle impostazioni cultura sia conforme a BCP-47. Tuttavia, sono stati usati i dati delle impostazioni cultura invarianti anziché i dati delle impostazioni cultura reali. A partire da .NET 6, viene generata un'eccezione se si creano impostazioni cultura diverse dalle impostazioni cultura invarianti in modalità invariante di globalizzazione.
- In precedenza, la modalità invariante di globalizzazione supportava solo il mapping tra maiuscole e minuscole per i caratteri ASCII. A partire da .NET 6, la modalità invariante di globalizzazione offre supporto completo per il mapping tra maiuscole e minuscole per tutti i caratteri definiti da Unicode. Il mapping tra maiuscole e minuscole viene usato in operazioni quali confronti tra stringhe, ricerche di stringhe e stringhe maiuscole o minuscole.
La modalità invariante di globalizzazione viene usata per le app che non richiedono alcun supporto per la globalizzazione. Ovvero, l'app viene eseguita senza accesso a dati e comportamenti specifici delle impostazioni cultura. La modalità invariante di globalizzazione è abilitata per impostazione predefinita in alcuni contenitori Docker, ad esempio contenitori Alpine.
Comportamento precedente
Nelle versioni precedenti di .NET quando è abilitata la modalità invariante di globalizzazione:
Se un'app crea impostazioni cultura non diverse dalle impostazioni cultura invarianti, l'operazione ha esito positivo, ma le impostazioni cultura restituite usano sempre i dati delle impostazioni cultura invarianti anziché i dati delle impostazioni cultura reali.
Il mapping tra maiuscole e minuscole è stato eseguito solo per i caratteri ASCII. Ad esempio:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
Nuovo comportamento
A partire da .NET 6 quando è abilitata la modalità invariante globalizzazione:
Se un'app tenta di creare impostazioni cultura non diverse dalle impostazioni cultura invarianti, viene generata un'eccezione CultureNotFoundException.
Il mapping tra maiuscole e minuscole viene eseguito per tutti i caratteri definiti da Unicode. Ad esempio:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
Versione introdotta
.NET 6
Motivo della modifica
Il cambiamento di creazione delle impostazioni cultura è stato introdotto per diagnosticare più facilmente i problemi correlati alle impostazioni cultura. Alcuni utenti non sanno che le app vengono eseguite in un ambiente in cui è abilitata la modalità invariante di globalizzazione. Possono riscontrare comportamenti imprevisti e non fare l'associazione con la modalità invariante di globalizzazione, quindi è difficile diagnosticare il problema.
Il supporto completo per il mapping dei casi è stato introdotto per migliorare l'usabilità e l'esperienza in modalità invariante di globalizzazione.
Azione consigliata
Nella maggior parte dei casi non è necessaria alcuna azione. Tuttavia, se si desidera il comportamento precedente di creazione delle impostazioni cultura, è possibile impostare un'opzione di configurazione di runtime per consentire la creazione di impostazioni cultura in modalità invariante di globalizzazione. Per altre informazioni, vedere impostazioni cultura predefinite.
API interessate
- CultureInfo
- System.Globalization.CultureInfo.CreateSpecificCulture(String)
- System.Globalization.CultureInfo.GetCultureInfo
- RegionInfo
- Tutte le API che eseguono maiuscole e minuscole di stringhe, confronto o ricerca