.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.1'de sunulan uygulama uyumluluğu sorunları listelenmektedir.

.NET Framework 4.8

ASP.NET

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

Ayrıntılar

.NET Framework 4.7.2 ve önceki sürümleri CheckBox.InputAttributes hedefleyen ve CheckBox.LabelAttributes bir WebForms CheckBox denetimine program aracılığıyla eklenen uygulamalar geri göndermeden sonra kaybolur. .NET Framework 4.8 veya sonraki sürümlerini hedefleyen uygulamalar geri göndermeden sonra korunur.

Öneri

Geri göndermede öznitelikleri geri yüklemeye yönelik doğru davranış için değerini 4,8 veya üzeri olarak ayarlayın targetFrameworkVersion . Ö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.

Veri Akışı Adı Değer
Kapsam Bilinmiyor
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.

Ayrıntılar

.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, öğesini kullanarak .NET Framework 4.8 veya üzerini targetFrameworkVersion hedeflerken, varsayılan davranış şerit sınırlayıcılarına dönüşür. Önceki çerçeve sürümlerini hedeflerken veya kullanmazken targetFrameworkVersion, bazı değerler için sondaki sınırlayıcılar döndürülür.

Bu davranış bir ile appSettingaçıkça denetlenebilir:

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

Etkilenen API’ler

ASP.NET ValidationContext.MemberName özel DataAnnotations.ValidationAttribute kullanılırken NULL değil

Ayrıntılar

.NET Framework 4.7.2 ve önceki sürümlerinde, özel System.ComponentModel.DataAnnotations.ValidationAttributeValidationContext.MemberName bir kullanılırken özelliği döndürürnull. 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 ile başlayarak varsayılan olarak döndürülüyornull, ancak bunun yerine üye adını döndürmeyi tercih edebilirsiniz.

Öneri

.NET Framework 4.8 ve sonraki sürümleri için .NET Framework Ekim 2019 Kalite Paketi Önizlemesi'nde üye adını döndürmek üzere özelliği için web.config dosyanıza aşağıdaki ayarı ekleyin:

<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 döndürürnull.

Veri Akışı Adı Değer
Kapsam Bilinmiyor
Sürüm 4.8
Tür Çalışma Zamanı

Etkilenen API’ler

Temel

.NET COM, olaylar üzerinde ByRef Kasa Array parametrelerini başarıyla sıralar

Ayrıntılar

.NET Framework 4.7.2 ve önceki sürümlerinde, COM olayındaki bir ByRef Kasa Array parametresi yerel koda geri sıralanamayacaktı. Bu değişiklikle, Kasa Array artık başarıyla sıraya konur.

  • [ x ] Quirked

Öneri

COM Olayları'nda ByRef Kasa Array 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>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.8
Tür Çalışma Zamanı

Etkilenen API’ler

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

.NET Birlikte Çalışma artık IAgileObject için QueryInterface olacak (WinRT arabirimi)

Ayrıntılar

.NET temsilcisiyle WinRT olayı kullanırken Windows, .NET Framework 4.8 ile başlayan IAgileObject için QI'yi kullanır. .NET Framework'ün önceki sürümlerinde çalışma zamanı bu QI'de başarısız olacaktı ve olay abone olammıştı.

  • [ x ] Quirked

Ö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 yerine HKLM kullanılır HKEY_LOCAL_MACHINE. Bu söz dizimi hakkında yardım görmek için kullanın reg add /? . Kayıt defteri değer adı büyük/küçük harfe duyarlı değil.

Veri Akışı Adı Değer
Kapsam Edge
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 yüksek karşıtlık değişikliği

Ayrıntılar

Microsoft Hizmet İzleme Görüntüleyicisi aracında ComboBox denetimleri belirli yüksek karşıtlık temalarında 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, aşağıdaki AppContext yapılandırma anahtarlarını svcTraceViewer.exe.config dosyasına 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" />
Veri Akışı Adı Değer
Kapsam Edge
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

Ayrıntılar

Kaynak nesne aynı imzaya sahip bir özel dizin oluşturucu bildirdiğinde IList dizin oluşturucusunun yanlış kullanımı düzeltildi Binding (ö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 AppContext anahtarını<runtime> ekleyip olarak ayarlayarak falsedeğ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>
Veri Akışı Adı Değer
Kapsam Ana
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

Ayrıntılar

Bir sanallaştırmanın ItemsControl , koleksiyonu yinelenen değer türündeki nesneler içerdiğinde Items kaydırma sırasında yanıt vermeyi durdurabildiği bir sorun düzeltildi.

Veri Akışı Adı Değer
Kapsam Ana
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

Ayrıntılar

.NET Framework 4.7'de kullanıma sunulan bir Grid içindeki boyutları ayırma algoritmasında bir hata düzeltildi. Boş satırlar içeren bir Kılavuz Height=&quot;Auto&quot; gibi bazı durumlarda satırlar yanlış konumda, büyük olasılıkla Kılavuz'un tamamen dışında yerleştirilmiştir.

Öneri

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

Veri Akışı Adı Değer
Kapsam Ana
Sürüm 4.8
Tür Çalışma Zamanı

Etkilenen API’ler

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

Ayrıntılar

Odak, üst ItemsControlöğenin seçili öğesi olmayan bir öğenin içindeki köprüdeyken ok tuşuna basmanın yanlış sonucu düzeltildi.

Veri Akışı Adı Değer
Kapsam Ana
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

Ayrıntılar

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

Veri Akışı Adı Değer
Kapsam Ana
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ı.