Perubahan runtime untuk migrasi ke .NET Framework 4.8.x

Artikel ini mencantumkan masalah kompatibilitas aplikasi yang diperkenalkan dalam .NET Framework 4.8 dan 4.8.1.

.NET Framework 4.8

ASP.NET

Penanganan Perbaikan ASP.NET InputAttributes dan LabelAttributes untuk kontrol WebForms CheckBox

Detail

Untuk aplikasi yang menargetkan .NET Framework 4.7.2 dan versi yang lebih lama, CheckBox.InputAttributes dan CheckBox.LabelAttributes yang ditambahkan secara terprogram ke kontrol CheckBox WebForms akan hilang setelah postback. Untuk aplikasi yang menargetkan .NET Framework versi 4.8 atau yang lebih baru, mereka dipertahankan setelah postback.

Saran

Untuk perilaku yang benar dalam memulihkan atribut pada postback, atur targetFrameworkVersion menjadi 4,8 atau lebih tinggi. Misalnya:

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

Mengaturnya lebih rendah, atau tidak sama sekali, mempertahankan perilaku lama yang salah.

Nama Nilai
Cakupan Tidak dikenal
Versi 4.8
Jenis Runtime

API yang Terpengaruh

ASP.NET Penanganan multi-bagian yang salah dapat mengakibatkan data formulir hilang.

Detail

Dalam aplikasi yang menargetkan .NET Framework 4.7.2 dan versi yang lebih lama, ASP.NET mungkin salah mengurai nilai batas multi-bagian, sehingga data formulir tidak tersedia selama eksekusi permintaan. Aplikasi yang menargetkan .NET Framework versi 4.8 atau yang lebih baru mengurai data multi-bagian dengan benar, sehingga nilai formulir tersedia selama eksekusi permintaan.

Saran

Dimulai dengan aplikasi yang berjalan di .NET Framework 4.8, saat menargetkan .NET Framework 4.8 atau yang lebih baru dengan menggunakan elemen targetFrameworkVersion, perilaku default berubah menjadi pembatas strip. Saat menargetkan versi kerangka kerja sebelumnya atau tidak menggunakan targetFrameworkVersion, pembatas berikutnya untuk beberapa nilai masih ditampilkan.

Perilaku ini juga dapat dikontrol secara eksplisit dengan appSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Nama Nilai
Cakupan Tidak dikenal
Versi 4.8
Jenis Runtime

API yang Terpengaruh

ASP.NET ValidationContext.MemberName tidak NULL saat menggunakan DataAnnotations.ValidationAttribute kustom

Detail

Di .NET Framework 4.7.2 dan versi sebelumnya, saat menggunakan System.ComponentModel.DataAnnotations.ValidationAttribute kustom, properti ValidationContext.MemberName mengembalikan null. Dalam versi .NET Framework 4.8 sebelum pembaruan Oktober 2019, versi tersebut mengembalikan nama anggota. Mulai dari .NET Framework Oktober 2019 Pratinjau Rollup Kualitas untuk .NET Framework 4.8, versi ini mengembalikan null secara default, tetapi Anda dapat memilih untuk mengembalikan nama anggota sebagai gantinya.

Saran

Tambahkan pengaturan berikut ke file web.config Anda untuk properti guna mengembalikan nama anggota di .NET Framework Oktober 2019 Pratinjau Rollup Kualitas untuk .NET Framework 4.8 dan versi yang lebih baru:

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

Dalam versi .NET Framework 4.8 sebelum pembaruan Oktober 2019, menambahkan pengaturan ini ke file web.config Anda akan memulihkan perilaku sebelumnya dan properti mengembalikan null.

Nama Nilai
Cakupan Tidak dikenal
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Inti

.NET COM berhasil menyusun parameter ByRef SafeArray pada peristiwa

Detail

Dalam .NET Framework 4.7.2 dan versi sebelumnya, parameter ByRef SafeArray pada peristiwa COM akan gagal untuk menyusun kembali ke kode asli. Dengan perubahan ini, SafeArray sekarang berhasil disusun.

  • [ x ] Unik

Saran

Jika menyusun parameter ByRef SafeArray dengan benar pada COM Events menghentikan eksekusi, Anda dapat menonaktifkan kode ini dengan menambahkan sakelar konfigurasi berikut ke konfigurasi aplikasi Anda:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nama Nilai
Cakupan Minor
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

.NET Interop sekarang akan QueryInterface untuk IAgileObject (antarmuka WinRT)

Detail

Saat menggunakan peristiwa WinRT dengan delegasi .NET, Windows akan QI untuk IAgileObject dimulai dengan .NET Framework 4.8. Di versi .NET Framework sebelumnya, runtime akan gagal pada QI tersebut, dan peristiwa tidak dapat dilanggani.

  • [ x ] Unik

Saran

Jika mengaktifkan QI untuk IAgileObject melanggar eksekusi, Anda dapat menonaktifkan kode ini dengan mengatur konfigurasi berikut.

Metode 1: Variabel lingkungan

Atur variabel lingkungan berikut: COMPLUS_DisableCCWSupportIAgileObject=1

Metode ini memengaruhi lingkungan apa pun yang mewarisi variabel lingkungan ini. Variabel ini mungkin hanya satu sesi konsol, atau mungkin memengaruhi seluruh mesin jika Anda mengatur variabel lingkungan secara global. Nama variabel lingkungan tidak peka huruf besar/kecil.

Metode 2: Registri

Menggunakan Editor Registri (regedit.exe), temukan salah satu dari subkunci berikut:

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

Kemudian tambahkan entri berikut:

Nama: DisableCCWSupportIAgileObject Tipe: DWORD (32-bit) value (juga disebut REG_DWORD) Data: 1

Anda dapat menggunakan alat Windows REG.EXE untuk menambahkan nilai ini dari baris perintah atau lingkungan skrip. Misalnya:

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

Dalam hal ini, HKLM digunakan sebagai ganti HKEY_LOCAL_MACHINE. Gunakan reg add /? untuk melihat bantuan tentang sintaksis ini. Nama nilai registri tidak peka huruf besar-kecil.

Nama Nilai
Cakupan Azure Stack Edge
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

Windows Communication Foundation (WCF)

svcTraceViewer ComboBox perubahan kontras tinggi

Detail

Di alat Microsoft Service Trace Viewer, kontrol ComboBox tidak ditampilkan dalam warna yang benar dalam tema kontras tinggi tertentu. Masalah telah diperbaiki di .NET Framework 4.7.2. Namun, karena persyaratan kompatibilitas mundur .NET Framework SDK, perbaikan tidak terlihat oleh pelanggan secara default. .NET 4.8 memunculkan perubahan ini dengan menambahkan pengalih konfigurasi AppContext berikut ke file svcTraceViewer.exe.config:

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

Saran

Jika Anda tidak ingin memiliki perubahan perilaku kontras tinggi, Anda dapat menonaktifkannya dengan menghapus bagian berikut dari file svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nama Nilai
Cakupan Azure Stack Edge
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

Windows Presentation Foundation (WPF)

Peningkatan Pengikatan Data untuk KeyedCollection

Detail

Binding Memperbaiki penggunaan pengindeks IList yang salah saat objek sumber mendeklarasikan pengindeks kustom dengan tanda tangan yang sama (misalnya, KeyedCollection<int,TItem>).

Saran

Agar aplikasi yang menargetkan versi lama dapat memanfaatkan perubahan ini, aplikasi harus berjalan di .NET Framework 4.8 atau yang lebih baru, dan harus ikut serta dalam perubahan dengan menambahkan sakelar AppContext berikut ke <runtime> dari file konfigurasi aplikasi dan mengaturnya menjadi false:

<?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>
Nama Nilai
Cakupan Parah
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

Memperbaiki masalah ketika ListBox berhenti merespons jika berisi jenis nilai duplikat

Detail

Memperbaiki masalah saat virtualisasi ItemsControl dapat berhenti merespons selama pengguliran saat kumpulan Items berisi objek dengan jenis nilai duplikat.

Nama Nilai
Cakupan Parah
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

Perbaikan pada algoritma pengalokasian ruang baris bintang Grid

Detail

Memperbaiki bug di algoritma untuk mengalokasikan ukuran ke) di Grid yang diperkenalkan di .NET Framework 4.7. Dalam beberapa kasus, seperti Kisi dengan Height=&quot;Auto&quot; berisi baris kosong, baris disusun pada posisi yang salah, mungkin di luar Kotak sama sekali.

Saran

Agar aplikasi mendapat manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.8 atau yang lebih baru.

Nama Nilai
Cakupan Parah
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

Detail

Memperbaiki hasil yang salah dari menekan tombol panah saat fokus pada hyperlink dalam item yang bukan item yang dipilih dari induk ItemsControl.

Nama Nilai
Cakupan Parah
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

Peningkatan performa di pohon Automation untuk mengelompokkan ItemsControls

Detail

Meningkatkan performa membangun kembali pohon otomatisasi ItemsControl, seperti ListBox atau DataGrid, tempat pengelompokan diaktifkan.

Nama Nilai
Cakupan Parah
Versi 4.8
Jenis Runtime

API yang Terpengaruh

Tidak terdeteksi melalui analisis API.

.NET Framework 4.8.1

Tidak ada masalah kompatibilitas aplikasi yang diperkenalkan di .NET Framework 4.8.1.