Aracılığıyla paylaş


PublishedTrimmed projeleri yansıma tabanlı serileştirmede başarısız oldu

PublishTrimmed MSBuild özelliğini etkinleştiren projeler artık System.Text.Json'un yansıma tabanlı varsayılanlarını otomatik olarak kapatıyor. Başka bir deyişle, için ayarı PublishTrimmedtrue , proje yapılandırmasında JsonSerializerIsReflectionEnabledByDefault aksi belirtilmedikçe MSBuild özelliğini false otomatik olarak olarak ayarlar.

Önceki davranış

Bu değişiklik öncesinde özelliği etkinleştirilmiş PublishTrimmedolan projeler <PublishTrimmed>true</PublishTrimmed> kırpılmış bir uygulama yayımlamıştı. Ancak, yansıma tabanlı varsayılan serileştirme davranışı mutlaka devre dışı bırakılmadı. Kırpılan koda bağlı olarak, aşağıdaki kod serileştirmeyi başarılı veya başarılı olmayabilir ya da doğru serileştirme verilerinin çıkışını verebilir veya vermeyebilir.

JsonSerializer.Serialize(new { Value = 42 });

Yeni davranış

.NET 8'den başlayarak, özelliği etkinleştirilmiş projeler serileştirmeyi PublishTrimmed doğru şekilde başarısız kılar. Kod JsonSerializer.Serialize(new { Value = 42 }); aşağıdaki özel durumu oluşturur:

System.InvalidOperationException: Yansıma tabanlı serileştirme bu uygulama için devre dışı bırakıldı.

Sürüm kullanıma sunulmuştur

.NET 8 Önizleme 7

Hataya neden olan değişikliğin türü

Bu değişiklik davranışsal bir değişikliktir.

Değişiklik nedeni

Bu değişiklik, kırpılan uygulamaların uygun varsayılanları kullanmasını sağlar. Ayrıca, kullanıcılara kırpılan uygulamalar için uygun en iyi yöntemleri benimseme konusunda yol gösterir; yani kaynak oluşturucuyu kullanın ve güvenli olmayan yansıma tabanlı bileşenlere yanlışlıkla bağımlılıktan kaçının.

Serileştirmenin başarılı olmasını sağlamak için kırpılan uygulamalarınızı kaynak oluşturucuyu kullanacak şekilde geçirmenizi öneririz.

Ancak yansıma kullanmanız gerekiyorsa, proje dosyanızda özelliğini açıkça etkinleştirerek özgün davranışa JsonSerializerIsReflectionEnabledByDefault geri dönebilirsiniz:

<PropertyGroup>
  <PublishTrimmed>true</PublishTrimmed>
  <JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>

Etkilenen API’ler

Yok

Ayrıca bkz.