.NET Framework 4.8.x'e geçiş için çalışma zamanı değişiklikleri

Bu makalede .NET Framework 4.8 ve 4.8.1ile sunulan uygulama uyumluluk sorunları listelenir.

.NET Framework 4.8

ASP.NET

ASP.NET WebForms CheckBox denetimi için InputAttributes ve LabelAttributes işlemesini düzeltme

Detaylar

.NET Framework 4.7.2 ve önceki sürümleri hedefleyen uygulamalar için, bir WebForms CheckBox.InputAttributes denetimine program aracılığıyla eklenen CheckBox.LabelAttributes ve CheckBox geri gönderme sonrasında kaybolur. .NET Framework 4.8 veya sonraki sürümlerini hedefleyen uygulamalar, geri gönderimden sonra korunmaya devam eder.

Öneri

Geri göndermede öznitelikleri geri yüklemek için doğru davranış sağlamak amacıyla targetFrameworkVersion değerini 4,8 veya daha yüksek olarak ayarlayın. Örneğin:

<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>

Bu ayarın daha düşük olması veya hiç yapılmaması, eski yanlış davranışı korur.

Adı Değer
Kapsam Bilinmeyen
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

ASP.NET Yanlış çok parçalı işleme, form verilerinin kaybolmasına neden olabilir.

Detaylar

.NET Framework 4.7.2 ve önceki sürümleri hedefleyen uygulamalarda, ASP.NET çok parçalı sınır değerlerini yanlış ayrıştırarak istek yürütme sırasında form verilerinin kullanılamamasıyla sonuçlanabilir. .NET Framework 4.8 veya sonraki sürümlerini hedefleyen uygulamalar çok parçalı verileri doğru ayrıştırdığından, form değerleri istek yürütme sırasında kullanılabilir.

Öneri

.NET Framework 4.8 üzerinde çalışan uygulamalardan başlayarak, targetFrameworkVersion öğesini kullanarak .NET Framework 4.8 veya üzerini hedeflerken, varsayılan davranış şerit sınırlayıcılarına dönüşür. Önceki platform sürümlerini hedeflerken veya targetFrameworkVersionkullanmazken, bazı değerler için sondaki sınırlayıcılar geri döndürülür.

Bu davranış, bir appSettingile açıkça denetlenebilir:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Adı Değer
Kapsam Bilinmeyen
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

ASP.NET ValidationContext.MemberName, özel DataAnnotations.ValidationAttribute kullanıldığında NULL değildir.

Detaylar

.NET Framework 4.7.2 ve önceki sürümlerinde, özel bir System.ComponentModel.DataAnnotations.ValidationAttributekullanılırken ValidationContext.MemberName özelliği nulldöndürür. Ekim 2019 güncelleştirmesinin öncesinde .NET Framework 4.8 sürümünde üye adını döndürür. .NET Framework 4.8 için .NET Framework Ekim 2019 Kalite Paketi Önizlemesi'den başlayarak, varsayılan olarak null döndürür. Ancak, bunun yerine üye adını döndürmeyi tercih edebilirsiniz.

Öneri

Aşağıdaki ayarı web.config dosyanıza ekleyin; bu ayar, .NET Framework Ekim 2019 Kalite Toplama Önizlemesi'te, .NET Framework 4.8 ve sonraki sürümleri için üye adını döndürmek üzere özelliği geri döndürecektir.

<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName"  value="true"/>
...
</appSettings>
</configuration>

Ekim 2019 güncelleştirmesi öncesinde .NET Framework 4.8 sürümünde bunu web.config dosyanıza eklemek önceki davranışı geri yükler ve özelliği nulldöndürür.

Adı Değer
Kapsam Bilinmeyen
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

Merkez

.NET COM, byRef SafeArray parametrelerini olaylar üzerinde başarıyla sıralar

Detaylar

.NET Framework 4.7.2 ve önceki sürümlerde, COM olayındaki bir ByRef SafeArray parametresi yerel koda geri aktarılamıyordu. Bu değişiklikle, SafeArray başarıyla sıraya konur.

  • [ x ] Tuhaflık

Öneri

COM Olaylarında ByRef SafeArray parametrelerini düzgün bir şekilde sıralamak yürütmeyi bozuyorsa, uygulama yapılandırmanıza aşağıdaki yapılandırma anahtarını ekleyerek bu kodu devre dışı bırakabilirsiniz:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Adı Değer
Kapsam Küçük
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

.NET Interop artık IAgileObject için QueryInterface çağıracak (WinRT arabirimi)

Detaylar

.NET temsilcisiyle bir WinRT olayı kullanıldığında, Windows .NET Framework 4.8'den itibaren IAgileObject için QI yapacaktır. .NET Framework'ün önceki sürümlerinde çalışma zamanı bu QI kontrolünde başarısız olacaktı ve olaylara abone olunamıyordu.

  • [ x ] Tuhaflık

Öneri

IAgileObject için QI etkinleştirildiğinde yürütme durduruluyorsa, aşağıdaki yapılandırmayı ayarlayarak bu kodu devre dışı bırakabilirsiniz.

Yöntem 1: Ortam değişkeni

Aşağıdaki ortam değişkenini ayarlayın: COMPLUS_DisableCCWSupportIAgileObject=1

Bu yöntem, bu ortam değişkenini devralan tüm ortamları etkiler. Bu yalnızca tek bir konsol oturumu olabilir veya ortam değişkenini genel olarak ayarlarsanız makinenin tamamını etkileyebilir. Ortam değişkeni adı büyük/küçük harfe duyarlı değildir.

Yöntem 2: Kayıt Defteri

Kayıt Defteri Düzenleyicisi'ni (regedit.exe) kullanarak aşağıdaki alt anahtarlardan birini bulun:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
  • HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework

Ardından aşağıdaki girdiyi ekleyin:

Ad: DisableCCWSupportIAgileObject Türü: DWORD (32 bit) değeri (REG_DWORD olarak da adlandırılır) Veri: 1

Bu değeri bir komut satırından veya betik ortamından eklemek için Windows REG.EXE aracını kullanabilirsiniz. Örneğin:

reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1

Bu durumda, HKLMyerine HKEY_LOCAL_MACHINE kullanılır. Bu söz diziminde yardım görmek için reg add /? kullanın. Kayıt defteri değer adı büyük/küçük harfe duyarlı değil.

Adı Değer
Kapsam Kenar
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

Windows Communication Foundation (WCF)

svcTraceViewer ComboBox'ta yüksek karşıtlık değişimi

Detaylar

Microsoft Hizmet İzleme Görüntüleyicisi aracında, ComboBox denetimleri belirli yüksek karşıtlıklı temalarda doğru renkte görüntülenmedi. Sorun .NET Framework 4.7.2'de düzeltildi. Bununla birlikte, .NET Framework SDK geriye dönük uyumluluk gereksinimleri nedeniyle düzeltme varsayılan olarak müşteriler tarafından görülemedi. .NET 4.8, svcTraceViewer.exe.config dosyasına aşağıdaki AppContext yapılandırma anahtarlarını ekleyerek bu değişikliği ortaya koyar:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />

Öneri

Yüksek karşıtlık davranışı değişikliğini istemiyorsanız, svcTraceViewer.exe.config dosyasından aşağıdaki bölümü kaldırarak bu değişikliği devre dışı bırakabilirsiniz:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Adı Değer
Kapsam Kenar
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

Windows Presentation Foundation (WPF)

KeyedCollection için Veri Bağlama iyileştirmesi

Detaylar

Kaynak nesne aynı imzaya sahip bir özel dizin oluşturucu bildirdiğinde IList dizin oluşturucusunun yanlış Binding kullanımı düzeltildi (örneğin, KeyedCollection<int,TItem>).

Öneri

Daha eski bir sürümü hedefleyen bir uygulamanın bu değişiklikten yararlanabilmesi için .NET Framework 4.8 veya sonraki sürümlerinde çalışması ve uygulama yapılandırma dosyasının bölümüne aşağıdaki <runtime> ekleyip falseolarak ayarlayarak değişikliği kabul etmesi gerekir:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.Data.Binding.IListIndexerHidesCustomIndexer=false" />
</runtime>
</configuration>
Adı Değer
Kapsam Binbaşı
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

Yinelenen değer türleri içeriyorsa ListBox'ın yanıt vermeyi durdurması sorunu düzeltildi

Detaylar

Düzeltildi: Bir sanallaştırma ItemsControl'ın, Items koleksiyonu yinelenen değer türündeki nesneler içerdiğinde kaydırılırken yanıt vermeyi durdurabilmesine neden olan bir sorun.

Adı Değer
Kapsam Binbaşı
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

Kılavuz yıldız satırları alanı ayırma algoritmasında iyileştirmeler

Detaylar

.NET Framework 4.7'de tanıtılan bir 'deiçin boyut tahsisi yapan algoritmasındaki bir hata düzeltildi. Bazı durumlarda, boş satırlar içeren Height=&quot;Auto&quot; Kılavuzu gibi, satırlar yanlış bir şekilde yerleştirilmiş ve muhtemelen Kılavuz'un tamamen dışında kalmış olabilir.

Öneri

Uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.8 veya sonraki sürümlerinde çalışması gerekir.

Adı Değer
Kapsam Binbaşı
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

Detaylar

Ana öğesi ItemsContrololan ancak seçili olmayan bir öğenin içindeki bir köprüde odaklandığında ok tuşuna basmanın yanlış sonucu düzeltildi.

Adı Değer
Kapsam Binbaşı
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

ItemsControls gruplandırma için Otomasyon ağacında performans geliştirmesi

Detaylar

Gruplandırma özelliğinin etkinleştirildiği ListBox veya DataGrid gibi bir ItemsControlotomasyon ağacını yeniden oluşturma performansı iyileştirildi.

Adı Değer
Kapsam Binbaşı
Sürüm 4.8
Tür Çalışma zamanı

Etkilenen API'ler

API analizi aracılığıyla algılanamaz.

.NET Framework 4.8.1

.NET Framework 4.8.1'de uygulama uyumluluğu sorunları uygulanmadı.