Aracılığıyla paylaş


Genelleştirme API'leri Windows Server 2019'da ICU kitaplıklarını kullanır

.NET 7 ve sonraki sürümler, Windows Server 2019'da çalışırken genelleştirme işlevselliği için Unicode için Uluslararası Bileşenler (ICU) kitaplıklarını kullanır. Windows'un sunucu dışı sürümleri .NET 5'ten beri ICU kullanıyor. Ancak .NET 7, windows 10 sürüm 1703, 1709, 1803 ve 1809 başta üzere önceki Windows istemci sürümlerinde ICU yükleme desteği kullanıma sunulmuştur.

Önceki davranış

.NET 5 ve .NET 6'da .NET kitaplıkları, Windows Server 2019'da genelleştirme işlevselliği için Ulusal Dil Desteği (NLS) API'lerini kullandı. Örneğin, NLS işlevleri dizeleri karşılaştırmak, kültür bilgilerini almak ve uygun kültürde dize büyük/küçük harflerini gerçekleştirmek için kullanılmıştır. Bu davranış 1703, 1709, 1803 ve 1809 gibi Windows 10 istemci sürümlerine de uygulanır.

Yeni davranış

.NET 7'den başlayarak, bir uygulama Windows Server 2019 veya Windows 10 istemci sürümleri 1703, 1709, 1803 ve 1809'da çalışıyorsa, .NET kitaplıkları varsayılan olarak ICU genelleştirme API'lerini kullanır. (Sunucu olmayan Windows sürümleri .NET 5'ten bu yana zaten ICU kullanıyor, bu nedenle bu sürümlerde bir değişiklik yoktur.)

Davranış farklılıkları

Küreselleştirme tesislerini kullandığınızı fark etmeseniz bile uygulamanızda değişiklikler görebilirsiniz. Aşağıdaki örnek, görebileceğiniz davranış değişikliklerinden birini gösterir, ancak başkaları da vardır.

Para birimi simgesi

Para birimi biçim belirticisini Ckullanarak bir dizeyi biçimlendiren aşağıdaki kodu göz önünde bulundurun. Geçerli iş parçacığının kültürü, ülke veya bölgeyi değil yalnızca dili içeren bir kültüre ayarlanır.

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
  • Windows Server 2019 veya Windows 10 istemci sürümleri 1703, 1709, 1803 ve 1809'da .NET 5 ve .NET 6 sürümlerinde, metnin değeri şeklindedir "100,00 €".
  • Windows Server 2019 veya Windows 10 istemci sürümleri 1703, 1709, 1803 ve 1809'da .NET 7'de, metnin değeri euro yerine uluslararası para birimi simgesini kullanan değeridir "100,00 ¤". ICU'da tasarım, para biriminin bir dilin değil, bir ülkenin veya bölgenin özelliği olmasıdır.

Değişiklik nedeni

  • .NET, ICU kitaplıklarına bağlı olan bazı API'ler (örneğin, TimeZoneInfo.TryConvertIanaIdToWindowsId(String, String)) kullanıma sunulmuştur. Windows Server 2019'da bu tür API'leri kullanmak isteyen kullanıcıların ICU Uygulaması Yerel özelliğini kullanarak ikili dosyalarıyla ICU kitaplıklarını el ile dağıtmaları gerekiyordu. Kod, kitaplığı kullanan uygulama veya hizmetle ICU kitaplıklarını yüklemeye zorlamayı denetleyebilen bir kitaplıkta olabileceğinden bu iyi bir çözüm değildi.
  • Windows Server 2019 bir bulut platformu (Azure gibi) tarafından otomatik olarak sağlanıyorsa, dağıtılan hizmetin böyle bir sunucuda çalıştırılacağı kesin olarak bilinmez. Ayrıca hizmet sahibinin, ICU ikili dosyalarının dağıtılıp dağıtılacağı/dağıtılacağı zamanları yönetmesi gerekir. Ayrıca, yeni .NET ICU bağımlı API'leri kullanmak isteyen Windows Server 2019 kullanılarak buluta dağıtılan her hizmetin ICU ikili dosyalarını hizmete dağıtması gerekir. Bu, sunucudaki diskin boyutunu şişirebilir.
  • Bazı kullanıcılar, Unicode Standard'a daha uygun olduğundan varsayılan olarak ICU kullanmayı tercih eder.

Sürüm kullanıma sunulmuştur

.NET 7

Windows Server 2019 veya Windows 10 istemci sürümleri 1703, 1709, 1803 veya 1809'da .NET 7 kullanıyorsanız, davranışın beklendiği gibi olduğundan ve kullanıcıları bozmadığından emin olmak için uygulamanızı veya hizmetinizi göndermeden önce test etmenizi öneririz.

NLS genelleştirme API'lerini kullanmaya devam etmek istiyorsanız, bu davranışa geri dönmek için bir çalışma zamanı anahtarı ayarlayabilirsiniz. Kullanılabilir anahtarlar hakkında daha fazla bilgi için .NET genelleştirme ve ICU makalesine bakın.

Etkilenen API’ler

Ayrıca bkz.