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="Auto"
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.
Peningkatan navigasi keyboard di ListBox dengan Hyperlink
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk