Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET 11'den başlayarak, AddConfiguration kullanılarak eklenen bir yapılandırma boş bir dizeyi mevcut bir değer olarak değerlendirir. Bu nedenle boş dize, önceki değerlerin etkin kalmasına izin vermek yerine dış yapılandırmada daha önce kaydedilen sağlayıcılardan gelen değerleri geçersiz kılar.
Bu değişiklik, .NET 10'da Yapılandırmada korunan Null değerleri ile oluşturulan boş değerler ve null yapılandırma değerleri arasındaki ayrımı sürdürmektedir.
null işlemenin zincirleme yapılandırma tarafından ele alınışı değişmemiştir.
Sürüm kullanıma sunulmuştur
.NET 11 RC 1
Önceki davranış
ChainedConfigurationProvider.TryGet boş bir dizeyi bulunamadı olarak bildirdi. Sonuç olarak, zincirlenmiş yapılandırmadaki boş bir değer önceki bir sağlayıcı tarafından sağlanan bir değeri geçersiz kılmadı:
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
IConfiguration inner = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>
{
["Endpoint"] = "",
})
.Build();
IConfiguration configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>
{
["Endpoint"] = "https://example.com",
})
.AddConfiguration(inner)
.Build();
Console.WriteLine($"Endpoint: '{configuration["Endpoint"]}'");
.NET 11 öncesinde, çıktı şöyleydi:
Endpoint: 'https://example.com'
Daha önce bir değer olmadığında, anahtar okunduğunda null döndürülüyordu ve tek değeri zincirlenmiş boş dize olan bölümün mevcut olmadığı kabul ediliyordu.
Yeni davranış
.NET 11'den başlayarak, ChainedConfigurationProvider.TryGet boş bir dizeyi bulundu olarak bildirir. Yukarıdaki örnekte, inner öğesinin boş değeri önceki değeri geçersiz kılar ve çıkış şöyle olur:
Endpoint: ''
Değeri boş dize olan bir bölümün mevcut olduğu kabul edilir. Bağlama, önceki sağlayıcının değeri yerine boş değeri de gözlemler. Örneğin, önceki bir sayısal değerin üzerindeki boş bir dizeyi bir tamsayı özelliğine bağlamak, doğrudan eklenen bir sağlayıcı tarafından sağlanan boş bir değerle tutarlı olarak InvalidOperationException hatası fırlatır.
Sarmalanan null içindeki null değeri, IConfiguration dizin oluşturucusu değeri IConfiguration olan bir anahtarla eksik bir anahtarı ayırt edemediğinden, eksik olarak değerlendirilmeye devam eder.
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Boş dize geçerli bir yapılandırma değeridir. Bunun eksik sayılması, doğrudan eklenen yapılandırma sağlayıcılarıyla zincirleme yapılandırmayı tutarsız hale getirdi ve uygulamaların bir ayarı boş bir dizeyle geçersiz kılarak kasıtlı olarak temizlemesini veya devre dışı bırakmasını engelledi. Yeni davranış, yapılandırma sağlayıcısının boş bir değerle eksik değer arasındaki ayrımını korur. Daha fazla bilgi için bkz. dotnet/runtime#131480.
Önerilen eylem
Boş bir dize önceki bir değeri geçersiz kılmaya yönelikse hiçbir eylem gerekmez.
Uygulamanız zincirlenmiş yapılandırmadaki boş bir dizeye dayalıysa ve önceki bir sağlayıcının değerinin kazanmasını sağlıyorsa, bu anahtarı zincirlenmiş yapılandırmadan kaldırın veya yokmuş gibi ya da null olarak gösterin. Zincirlenmiş değerleri dize olmayan türlere bağlayan uygulamalar, hedef tür için boş bir değer geçerli değilse bağlamadan önce boş değerleri doğrulamalı veya normalleştirmelidir. Önceki davranışı geri yüklemek için uyumluluk anahtarı yoktur.