Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini mencantumkan masalah kompatibilitas aplikasi yang diperkenalkan dalam .NET Framework 4.6, 4.6.1, dan 4.6.2.
.NET Framework 4.6
ASP.NET
GridViews dengan AllowCustomPaging yang diatur ke true dapat memicu peristiwa PageIndexChanging saat meninggalkan halaman akhir tampilan
Detail lebih lanjut
Bug di .NET Framework 4.5 menyebabkan System.Web.UI.WebControls.GridView.PageIndexChanging terkadang tidak dijalankan untuk System.Web.UI.WebControls.GridView yang telah mengaktifkan System.Web.UI.WebControls.GridView.AllowCustomPaging.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut. Sebagai solusinya, aplikasi dapat melakukan BindGrid eksplisit di semua Page_Load yang akan mencapai kondisi ini (System.Web.UI.WebControls.GridView ada di halaman terakhir dan System.Web.UI.WebControls.GridView.PageSize terakhir berbeda dengan System.Web.UI.WebControls.GridView.PageSize). Sebagai alternatif, aplikasi dapat dimodifikasi agar penomoran halaman dapat dilakukan (bukan penomoran halaman kustom), karena skenario tersebut tidak menunjukkan masalah.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Inti
ConcurrentDictionary yang telah diserialisasi di .NET Framework 4.5 menggunakan NetDataContractSerializer tidak dapat dideserialisasi oleh .NET Framework 4.5.1 atau 4.5.2
Detail lebih lanjut
Karena perubahan internal pada jenis tersebut, objek ConcurrentDictionary<TKey,TValue> yang diserialisasi dengan .NET Framework 4.5 dengan menggunakan System.Runtime.Serialization.NetDataContractSerializer tidak dapat dideserialisasi di .NET Framework 4.5.1 atau di .NET Framework 4.5.2. Perlu diperhatikan bahwa kebalikan dari upaya ini (serialisasi dengan .NET Framework 4.5.x dan deserialisasi dengan .NET Framework 4.5) dapat dilakukan. Demikian pula, semua serialisasi lintas versi 4.x berfungsi dengan .NET Framework 4.6. Serialisasi dan deserialisasi dengan satu versi .NET Framework tidak terpengaruh.
Saran
Jika perlu untuk menserialisasikan dan mendeserialisasi System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> antara .NET Framework 4.5 dan .NET Framework 4.5.1/4.5.2, serializer yang berbeda seperti System.Runtime.Serialization.DataContractSerializer harus digunakan alih-alih System.Runtime.Serialization.NetDataContractSerializer. Atau, karena masalah ini dibahas dalam .NET Framework 4.6, masalah ini dapat diselesaikan dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.5.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
AppDomainSetup.DynamicBase tidak lagi dibuat acak oleh UseRandomizedStringHashAlgorithm
Detail lebih lanjut
Sebelum .NET Framework 4.6, nilai DynamicBase akan diacak antara domain aplikasi, atau di antara proses, jika UseRandomizedStringHashAlgorithm diaktifkan dalam file konfigurasi aplikasi. Dimulai di .NET Framework 4.6, DynamicBase akan mengembalikan hasil yang stabil antara instans aplikasi yang berbeda yang berjalan, dan di antara domain aplikasi yang berbeda. Basis dinamis masih akan berbeda untuk aplikasi yang berbeda; perubahan ini hanya menghapus elemen penamaan acak untuk instans yang berbeda dari aplikasi yang sama.
Saran
Ketahuilah bahwa mengaktifkan UseRandomizedStringHashAlgorithm tidak akan menyebabkan DynamicBase menjadi acak. Jika basis acak diperlukan, basis tersebut harus diproduksi dalam kode aplikasi Anda daripada melalui API ini.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Memanggil Attribute.GetCustomAttributes pada properti pengindeks tidak lagi melempar AmbiguousMatchException jika ambiguitas dapat diselesaikan berdasarkan jenis indeks
Detail lebih lanjut
Sebelum .NET Framework 4.6, memanggil GetCustomAttribute(s) properti pengindeks yang berbeda dari properti lain hanya berdasarkan jenis indeks akan menghasilkan System.Reflection.AmbiguousMatchException. Dimulai di .NET Framework 4.6, atribut properti akan dikembalikan dengan benar.
Saran
Ketahuilah bahwa GetCustomAttribute akan bekerja lebih sering sekarang. Jika aplikasi sebelumnya mengandalkan System.Reflection.AmbiguousMatchException, pantulan sekarang harus digunakan untuk secara eksplisit mencari beberapa pengindeks, sebagai gantinya.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
- Attribute.GetCustomAttribute(MemberInfo, Type)
- Attribute.GetCustomAttribute(MemberInfo, Type, Boolean)
- Attribute.GetCustomAttributes(MemberInfo)
- Attribute.GetCustomAttributes(MemberInfo, Boolean)
- Attribute.GetCustomAttributes(MemberInfo, Type)
- Attribute.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo, Boolean)
COR_PRF_GC_ROOT_HANDLEs tidak didaftar oleh profiler.
Detail lebih lanjut
Di .NET Framework v4.5.1, API profil RootReferences2() tidak pernah mengembalikan COR_PRF_GC_ROOT_HANDLE secara salah (sebagai gantinya, ia dikembalikan sebagai COR_PRF_GC_ROOT_OTHER). Masalah ini diperbaiki mulai dari .NET Framework 4.6.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.5.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
ETW EventListeners tidak menangkap peristiwa dari penyedia dengan kata kunci eksplisit (seperti penyedia TPL)
Detail lebih lanjut
ETW EventListeners dengan masker kata kunci kosong tidak menangkap kejadian dengan tepat dari penyedia yang memiliki kata kunci eksplisit. Di .NET Framework 4.5, penyedia TPL mulai menyediakan kata kunci eksplisit dan memicu masalah ini. Di .NET Framework 4.6, EventListeners telah diperbarui agar tidak lagi mengalami masalah ini.
Saran
Untuk mengatasi masalah ini, ganti panggilan ke EnableEvents(EventSource, EventLevel) dengan panggilan ke overload EnableEvents yang secara eksplisit menentukan masker "kata kunci apa pun" yang akan digunakan: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)).
Sebagai alternatif, masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Kalender Persia sekarang menggunakan algoritma surya Hijriah
Detail lebih lanjut
Dimulai dengan .NET Framework 4.6, kelas System.Globalization.PersianCalendar menggunakan algoritma kalender surya Hijriah. Mengonversi tanggal antara System.Globalization.PersianCalendar dan kalender lainnya dapat menghasilkan perbedaan kecil mulai dari .NET Framework 4.6 untuk tanggal sebelum 1800 atau setelah 2023 (Gregorian). Selain itu, PersianCalendar.MinSupportedDateTime sekarang March 22, 0622 alih-alih March 21, 0622.
Saran
Ketahuilah bahwa beberapa tanggal awal atau terlambat mungkin sedikit berbeda saat menggunakan PersianCalendar di .NET Framework 4.6. Selain itu, saat menserialisasikan tanggal antara proses yang dapat berjalan pada versi .NET Framework yang berbeda, jangan menyimpannya sebagai string tanggal PersianCalendar (karena nilai tersebut mungkin berbeda).
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Objek refleksi tidak dapat lagi diteruskan dari kode terkelola ke klien DCOM yang tidak diproses
Detail lebih lanjut
Objek refleksi tidak dapat lagi diteruskan dari kode terkelola ke klien DCOM yang tidak diproses. Jenis berikut terpengaruh:
- System.Reflection.Assembly
- System.Reflection.MemberInfo(dan jenis turunannya, termasuk System.Reflection.FieldInfo, , System.Reflection.MethodInfoSystem.Type, dan System.Reflection.TypeInfo)
- System.Reflection.MethodBody
- System.Reflection.Module
- System.Reflection.ParameterInfo
Panggilan ke IMarshal untuk objek menghasilkan E_NOINTERFACE.
Saran
Perbarui kode marshaling agar berfungsi dengan objek non-refleksi.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
- System.Reflection.Assembly
- System.Reflection.FieldInfo
- System.Reflection.MemberInfo
- System.Reflection.MethodBody
- System.Reflection.MethodInfo
- System.Reflection.Module
- System.Reflection.ParameterInfo
- System.Reflection.TypeInfo
- System.Type
TargetFrameworkName untuk domain aplikasi bawaan tidak lagi otomatis menjadi null jika tidak ditentukan.
Detail lebih lanjut
System.AppDomainSetup.TargetFrameworkName yang sebelumnya bernilai null dalam domain aplikasi default, kecuali ditetapkan secara eksplisit. Mulai 4.6, System.AppDomainSetup.TargetFrameworkName properti untuk domain aplikasi default akan memiliki nilai default yang berasal dari TargetFrameworkAttribute (jika ada). Domain aplikasi non-default akan terus mewarisi System.AppDomainSetup.TargetFrameworkName dari domain aplikasi default (yang tidak akan menjadi null pada versi 4.6) kecuali jika digantikan secara eksplisit.
Saran
Kode harus diperbarui agar tidak bergantung pada TargetFrameworkName default ke null. Jika diperlukan bahwa properti ini terus bernilai null, dapat secara eksplisit diatur ke nilai tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
X509Certificate2.ToString(Boolean) tidak melempar sekarang ketika .NET tidak dapat menangani sertifikat
Detail lebih lanjut
Dalam .NET Framework 4.5.2 dan versi yang lebih lama, metode ini akan melempar jika true diteruskan untuk parameter verbose dan ada sertifikat yang diinstal yang tidak didukung oleh .NET Framework. Sekarang, metode akan berhasil dan mengembalikan string valid yang menghilangkan bagian sertifikat yang tidak dapat diakses.
Saran
Kode apa pun yang bergantung pada X509Certificate2.ToString(Boolean) harus diperbarui agar mengantisipasi bahwa string yang dikembalikan dapat mengecualikan beberapa data sertifikat (seperti kunci publik, kunci pribadi, dan ekstensi) dalam beberapa kasus di mana API sebelumnya akan membuang pengecualian.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Data Informasi
Mencoba koneksi TCP/IP ke database SQL Server yang mengarah ke localhost gagal
Detail lebih lanjut
Dalam .NET Framework 4.6 dan 4.6.1, ketika mencoba koneksi TCP/IP ke database SQL Server yang berujung pada localhost mengalami kegagalan dengan kesalahan, "Terjadi kesalahan terkait jaringan atau khusus instans saat membuat koneksi ke SQL Server." Server tidak ditemukan atau tidak dapat diakses. Verifikasi bahwa nama instans sudah benar dan SQL Server dikonfigurasi untuk memungkinkan koneksi jarak jauh. (penyedia: Antarmuka Jaringan SQL, kesalahan: 26 - Kesalahan Menemukan Server/Instans Ditentukan)"
Saran
Masalah ini telah diatasi dan perilaku sebelumnya dipulihkan di .NET Framework 4.6.2. Untuk menyambungkan ke database SQL Server yang mengarah ke localhost, tingkatkan ke .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Pemecah Masalah
Nilai penggabungan null tidak terlihat di debugger hingga satu langkah berikutnya
Detail lebih lanjut
Bug di .NET Framework 4.5 menyebabkan nilai yang ditetapkan melalui operasi penggabungan null tidak langsung terlihat di debugger setelah operasi penetapan dieksekusi saat dijalankan di Framework versi 64-bit.
Saran
Melakukan langkah tambahan dalam debugger akan menyebabkan nilai lokal atau bidang diperbarui secara akurat. Selain itu, masalah ini telah diperbaiki di .NET Framework 4.6; meningkatkan ke versi Framework tersebut akan menyelesaikan masalah.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Jaringan
ContentDisposition DateTimes mengembalikan string yang sedikit berbeda
Detail lebih lanjut
Representasi string dari System.Net.Mime.ContentDisposition telah diperbarui, mulai dari versi 4.6, untuk selalu mewakili komponen jam dari System.DateTime dengan dua digit. Ini untuk mematuhi RFC822 dan RFC2822. Ini menyebabkan ToString() mengembalikan string yang sedikit berbeda dalam 4,6 dalam skenario di mana salah satu elemen waktu disposisi adalah sebelum pukul 10.00. Perhatikan bahwa ContentDispositions terkadang diserialisasikan dengan mengonversinya menjadi string, sehingga semua operasi, serialisasi, atau panggilan GetHashCode harus diulas.
Saran
Jangan berharap bahwa representasi string ContentDispositions dari versi .NET Framework yang berbeda akan membandingkan satu sama lain dengan benar. Konversi string kembali ke ContentDispositions, jika memungkinkan, sebelum melakukan perbandingan.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Serialisasi
Pesan pengecualian telah berubah pada serialisasi *DataContract* yang gagal jika terdapat jenis yang tidak dikenal
Detail lebih lanjut
Dimulai di .NET Framework 4.6, pesan pengecualian yang diberikan jika System.Runtime.Serialization.DataContractSerializer atau System.Runtime.Serialization.Json.DataContractJsonSerializer gagal menserialisasikan atau mendeserialisasi karena hilangnya 'jenis yang diketahui' telah diklarifikasi.
Saran
Aplikasi tidak boleh bergantung pada pesan pengecualian tertentu. Jika aplikasi bergantung pada pesan ini, perbarui untuk mengharapkan pesan baru atau (sebaiknya) mengubahnya agar hanya bergantung pada jenis pengecualian.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
- DataContractJsonSerializer(Type)
- DataContractJsonSerializer(Type, IEnumerable<Type>)
- DataContractJsonSerializer(Type, DataContractJsonSerializerSettings)
- DataContractJsonSerializer(Type, String)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>)
- DataContractJsonSerializer(Type, XmlDictionaryString)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>)
- DataContractJsonSerializer(Type, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractSerializer(Type)
- DataContractSerializer(Type, DataContractSerializerSettings)
- DataContractSerializer(Type, IEnumerable<Type>)
- DataContractSerializer(Type, String, String)
- DataContractSerializer(Type, String, String, IEnumerable<Type>)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
Penyiapan dan Penyebaran
Perubahan penerapan versi produk dalam .NET Framework 4.6 dan versi yang lebih baru
Detail lebih lanjut
Versi produk telah berubah dari rilis .NET Framework sebelumnya, terutama dari .NET Framework 4, 4.5, 4.5.1, dan 4.5.2. Berikut ini adalah perubahan terperinci:
- Nilai
Versionentri dalamHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Fullkunci telah berubah menjadi4.6.xxxxxuntuk .NET Framework 4.6 dan rilis minor, dan menjadi4.7.xxxxxuntuk .NET Framework 4.7 dan 4.7.1. Dalam .NET Framework 4.5, 4.5.1, dan 4.5.2, ia memiliki format4.5.xxxxx. - File dan penentuan versi produk untuk file .NET Framework telah berubah dari skema versi sebelumnya 4.0.30319.x menjadi 4.6.X.0 untuk .NET Framework 4.6 dan rilis minor berikutnya, dan menjadi 4.7.X.0 untuk .NET Framework 4.7 dan 4.7.1. Anda dapat melihat nilai baru ini saat melihat Properti file setelah mengklik kanan file.
- Atribut AssemblyFileVersionAttribute dan AssemblyInformationalVersionAttribute untuk assembly terkelola memiliki nilai Versi dalam bentuk 4.6.X.0 untuk .NET Framework 4.6 dan versi minor, dan 4.7.X.0 untuk .NET Framework 4.7 dan 4.7.1.
- Dalam .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, dan 4.7.1, Environment.Version properti mengembalikan string
4.0.30319.42000versi tetap . Dalam .NET Framework 4, 4.5, 4.5.1, dan 4.5.2, ia mengembalikan string versi dalam format4.0.30319.xxxxx(misalnya, "4.0.30319.18010"). Perhatikan bahwa kami tidak menyarankan kode aplikasi mengambil dependensi baru pada properti Environment.Version.
Untuk informasi selengkapnya, lihat Cara: Menentukan Versi .NET Framework mana yang Diinstal.
Saran
Secara umum, aplikasi harus bergantung pada teknik yang direkomendasikan untuk mendeteksi hal-hal seperti versi runtime dari .NET Framework dan direktori penginstalan:
- Untuk mendeteksi versi runtime .NET Framework, lihat Cara: Menentukan Versi .NET Framework Mana yang Diinstal.
- Untuk menentukan jalur penginstalan untuk .NET Framework, gunakan nilai
InstallPathentri di kunciHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.
Penting
Nama subkunci adalah NET Framework Setup, bukan .NET Framework Setup.
- Untuk menentukan jalur direktori ke runtime bahasa umum dari .NET Framework, panggil metode RuntimeEnvironment.GetRuntimeDirectory().
- Untuk mendapatkan versi CLR, panggil metode RuntimeEnvironment.GetSystemVersion(). Untuk .NET Framework 4 dan rilis lebih kecil (.NET Framework 4.5, 4.5.1, 4.5.2, dan .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, dan 4.7.1), menghasilkan string v4.0.30319.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
.NET Framework 4.6 tidak menggunakan versi 4.5.x.x saat mendaftarkan dirinya di registri
Detail lebih lanjut
Seperti yang diharapkan, kunci versi yang diatur dalam registri (pada HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) untuk .NET Framework 4.6 dimulai dengan '4.6', bukan '4.5'. Aplikasi yang bergantung pada kunci registri ini untuk mengetahui versi .NET Framework mana yang diinstal pada komputer harus diperbarui untuk memahami bahwa 4.6 adalah versi baru yang mungkin, dan yang kompatibel dengan rilis 4.5.x sebelumnya.
Saran
Perbarui aplikasi yang memeriksa pemasangan .NET Framework 4.5 dengan mencari kunci registri 4.5 dan menerima 4.6 juga.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Windows Communication Foundation (WCF)
Layanan WCF yang menggunakan NETTCP dengan keamanan SSL dan autentikasi sertifikat MD5
Detail lebih lanjut
.NET Framework 4.6 menambahkan TLS 1.1 dan TLS 1.2 ke daftar protokol default WCF SSL. Ketika komputer klien dan server menginstal .NET Framework 4.6 atau yang lebih baru, TLS 1.2 digunakan untuk negosiasi. TLS 1.2 tidak mendukung autentikasi sertifikat MD5. Akibatnya, jika pelanggan menggunakan sertifikat MD5, klien WCF akan gagal terhubung ke layanan WCF.
Saran
Anda dapat mengatasi masalah ini sehingga klien WCF dapat tersambung ke server WCF dengan melakukan salah satu hal berikut:
- Perbarui sertifikat untuk tidak menggunakan algoritma MD5. Ini adalah solusi yang direkomendasikan.
- Jika pengikatan tidak dikonfigurasi secara dinamis dalam kode sumber, perbarui file konfigurasi aplikasi untuk menggunakan TLS 1.1 atau versi protokol yang lebih lama. Ini memungkinkan Anda untuk terus menggunakan sertifikat dengan algoritma hash MD5.
Peringatan
Solusi ini tidak disarankan, karena sertifikat dengan algoritma hash MD5 dianggap tidak aman.
File konfigurasi berikut melakukan ini:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding>
<security mode= "None/Transport/Message/TransportWithMessageCredential" >
<transport clientCredentialType="None/Windows/Certificate"
protectionLevel="None/Sign/EncryptAndSign"
sslProtocols="Ssl3/Tls1/Tls11">
</transport>
</security>
</binding>
</netTcpBinding>
</bindings>
</system.ServiceModel>
</configuration>
- Jika pengikatan dikonfigurasi secara dinamis dalam kode sumber, perbarui TcpTransportSecurity.SslProtocols properti untuk menggunakan TLS 1.1 (SslProtocols.Tls11 atau versi protokol yang lebih lama dalam kode sumber.
Peringatan
Solusi ini tidak disarankan, karena sertifikat dengan algoritma hash MD5 dianggap tidak aman.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Windows Presentation Foundation (WPF)
Mengakses item yang dipilih WPF DataGrid dari pengendali acara UnloadingRow DataGrid dapat menyebabkan NullReferenceException
Detail lebih lanjut
Dikarenakan bug di .NET Framework 4.5, penanganan aktivitas untuk peristiwa DataGrid yang melibatkan penghapusan baris dapat menyebabkan System.NullReferenceException muncul jika mereka mengakses properti DataGrid atau System.Windows.Controls.Primitives.Selector.SelectedItem milik System.Windows.Controls.Primitives.MultiSelector.SelectedItems.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Memanggil Items.Refresh pada ListBox, ListView, atau DataGrid WPF dengan item yang dipilih dapat menyebabkan item duplikat muncul di elemen
Detail lebih lanjut
Di .NET Framework 4.5, memanggil ListBox.Items.Refresh dari kode saat item dipilih di System.Windows.Controls.ListBox dapat menyebabkan item yang dipilih diduplikasi dalam daftar. Masalah serupa terjadi dengan System.Windows.Controls.ListView dan System.Windows.Controls.DataGrid. Masalah ini diperbaiki di .NET Framework 4.6.
Saran
Masalah ini dapat diatasi dengan membatalkan pilihan item secara terprogram sebelum System.Windows.Data.CollectionView.Refresh() dipanggil lalu memilihnya kembali setelah panggilan selesai. Sebagai alternatif, masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nilai | |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
PaksaApakahKotakPemilihanDisorot
Detail lebih lanjut
Urutan tindakan tertentu yang melibatkan System.Windows.Controls.ComboBox dan sumber datanya dapat menghasilkan System.NullReferenceException.
Saran
Jika memungkinkan, tingkatkan ke .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Masalah pengikatan ListBoxItem IsSelected dengan ObservableCollection<T>.Move
Detail lebih lanjut
Memanggil Move(Int32, Int32) atau MoveItem(Int32, Int32) pada koleksi yang terikat ke System.Windows.Controls.ListBox dengan item yang dipilih dapat menyebabkan perilaku tidak terduga dalam pilihan atau pembatalan pilihan item System.Windows.Controls.ListBox di kemudian hari.
Saran
Memanggil System.Collections.ObjectModel.Collection<T>.Remove(T) dan System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) alih-alih Move(Int32, Int32) akan mengatasi masalah ini. Sebagai alternatif, masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Mengeklik kanan header baris WPF DataGrid akan mengubah pilihan DataGrid
Detail lebih lanjut
Mengklik kanan header baris System.Windows.Controls.DataGrid yang telah dipilih saat beberapa baris juga dipilih akan mengubah pilihan System.Windows.Controls.DataGrid menjadi hanya pada baris tersebut.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
WPF menghasilkan proses wisptis.exe yang dapat membekukan mouse
Detail lebih lanjut
Masalah diperkenalkan di 4.5.2 yang menyebabkan wisptis.exe muncul yang dapat membekukan input mouse.
Saran
Perbaikan untuk masalah ini tersedia dalam rilis layanan .NET Framework 4.5.2 (hotfix rollup 3026376), atau dengan meningkatkan ke .NET Framework 4.6
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Utama |
| Versi | 4.5.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Pemeriksaan ejaan WPF dalam kontrol berkemampuan teks tidak akan berfungsi di Windows 10 untuk bahasa yang tidak ada dalam daftar bahasa input OS
Detail lebih lanjut
Saat berjalan pada Windows 10, pemeriksa ejaan mungkin tidak berfungsi untuk kontrol yang mendukung teks WPF karena kemampuan pemeriksaan ejaan platform hanya tersedia untuk bahasa yang ada dalam daftar bahasa input. Di Windows 10, ketika bahasa ditambahkan ke daftar keyboard yang tersedia, Windows secara otomatis mengunduh dan menginstal paket Fitur sesuai Permintaan (FOD) yang sesuai yang menyediakan kemampuan pemeriksaan ejaan. Dengan menambahkan bahasa ke daftar bahasa input, pemeriksa ejaan akan didukung.
Saran
Ketahuilah bahwa bahasa atau teks yang akan diperiksa ejaan harus ditambahkan sebagai bahasa input agar pemeriksaan ejaan berfungsi di Windows 10.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Jendela WPF dirender tanpa kliping saat memperluas di luar satu monitor
Detail lebih lanjut
Dalam .NET Framework 4.6 yang berjalan pada Windows 8 ke atas, seluruh jendela dirender tanpa pemotongan ketika melebihi satu tampilan dalam konfigurasi multi-monitor. Ini berbeda dari versi .NET Framework sebelumnya yang akan memotong jendela WPF yang melebar di luar satu layar.
Saran
Perilaku ini (apakah akan mengklip atau tidak) dapat diatur secara eksplisit menggunakan <EnableMultiMonitorDisplayClipping> elemen dalam <appSettings> file konfigurasi aplikasi, atau dengan mengatur EnableMultiMonitorDisplayClipping properti saat pengaktifan aplikasi.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Kerangka Kerja .NET 4.6.1
Alat
Contract.Invariant atau Contract.Requires<TException> tidak menganggap String.IsNullOrEmpty murni
Detail lebih lanjut
Untuk aplikasi yang menargetkan .NET Framework 4.6.1, jika kontrak invarian untuk Contract.Invariant atau kontrak prasyarat untuk Requires memanggil metode String.IsNullOrEmpty, penulis ulang mengeluarkan peringatan kompilator CC1036: "Panggilan yang terdeteksi ke metode 'System.String.IsNullOrWhiteSpace(System.String)' tanpa atribut [Pure] di dalam metode." Ini adalah peringatan kompilator daripada kesalahan kompilator.
Saran
Perilaku ini ditangani dalam Masalah GitHub #339. Untuk menghilangkan peringatan ini, Anda dapat mengunduh dan mengkompilasi versi kode sumber yang diperbarui untuk alat Kontrak Kode dari GitHub. Informasi unduhan ditemukan di bagian bawah halaman.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Windows Presentation Foundation (WPF)
Menggulir daftar item datar dengan tinggi piksel yang berbeda-beda
Detail lebih lanjut
System.Windows.Controls.ItemsControl Ketika menampilkan koleksi menggunakan virtualisasi (IsVirtualizing=true) dan pengguliran item (ScrollUnit=Item), serta saat kontrol menggulir untuk menunjukkan item yang tinggi pikselnya berbeda dari tetangganya, System.Windows.Controls.VirtualizingStackPanel mengiterasi semua item dalam koleksi. UI tidak responsif selama iterasi ini. Iterasi terjadi dalam keadaan lain, bahkan dalam rilis .NET Framework sebelumnya. Misalnya, itu terjadi ketika pengguliran piksel (ScrollUnit=Pixel) saat menemukan item dengan tinggi piksel yang berbeda, dan ketika menggulir item data hierarkis (seperti System.Windows.Controls.TreeView atau System.Windows.Controls.ItemsControl dengan pengelompokan diaktifkan) setelah menemukan item dengan jumlah item turunan yang berbeda dari tetangganya. Untuk kasus pengguliran item dan tinggi piksel yang berbeda, iterasi diperkenalkan dalam .NET Framework 4.6.1 untuk memperbaiki bug dalam tata letak data hierarkis. Tidak diperlukan jika data datar (tidak ada hierarki), dan .NET Framework 4.6.2 tidak melakukannya dalam kasus tersebut.
Saran
Jika iterasi terjadi di .NET Framework 4.6.1 tetapi tidak dalam rilis sebelumnya - yaitu, jika System.Windows.Controls.ItemsControl adalah item - menggulir daftar datar dengan item dengan tinggi piksel yang berbeda - ada dua solusi:
- Instal .NET Framework 4.6.2.
- Instal perbaikan HR 1605 untuk .NET Framework 4.6.1.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
ObjectDisposedException dilemparkan oleh pemeriksa ejaan WPF
Detail lebih lanjut
Aplikasi WPF terkadang mengalami crash selama pematian aplikasi dengan kesalahan System.ObjectDisposedException yang dilemparkan oleh pemeriksa ejaan. Ini diperbaiki dalam .NET Framework 4.7 WPF dengan menangani pengecualian dengan baik, oleh karena itu memastikan bahwa aplikasi tidak lagi terpengaruh. Perlu dicatat bahwa pengecualian kesempatan pertama sesekali akan terus diamati dalam aplikasi yang berjalan di bawah debugger.
Saran
Tingkatkan ke .NET Framework 4.7
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Pemeriksaan Ejaan WPF gagal dengan cara yang tidak terduga
Detail lebih lanjut
Ini termasuk sejumlah masalah Pemeriksa Ejaan WPF:
- Pemeriksa Ejaan WPF terkadang menghasilkan kesalahan System.Runtime.InteropServices.COMException
- Pemeriksa Ejaan WPF gagal ketika aplikasi diluncurkan dengan UnauthorizedAccessException dijalankan sebagai pengguna berbeda
- Pemeriksa Ejaan WPF salah mengidentifikasi kesalahan ejaan dalam kata majemuk seperti 'Hausnummer' dalam bahasa Jerman.
Saran
Masalah #1 - Ini telah diperbaiki dalam .NET Framework 4.6.2. Masalah #2 - Pemeriksa Ejaan WPF tidak lagi didukung saat aplikasi diluncurkan menggunakan opsi 'jalankan sebagai pengguna yang berbeda'. Memulai .NET Framework 4.6.2, aplikasi yang diluncurkan dengan cara ini tidak akan lagi mengalami crash secara tiba-tiba - sebagai gantinya Pemeriksa Ejaan akan dinonaktifkan secara diam-diam. Masalah #3 - Ini telah diperbaiki di .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
.NET Framework 4.6.2
Data Informasi
Mencoba koneksi TCP/IP ke database SQL Server yang mengarah ke localhost gagal
Detail lebih lanjut
Dalam .NET Framework 4.6 dan 4.6.1, ketika mencoba koneksi TCP/IP ke database SQL Server yang berujung pada localhost mengalami kegagalan dengan kesalahan, "Terjadi kesalahan terkait jaringan atau khusus instans saat membuat koneksi ke SQL Server." Server tidak ditemukan atau tidak dapat diakses. Verifikasi bahwa nama instans sudah benar dan SQL Server dikonfigurasi untuk memungkinkan koneksi jarak jauh. (penyedia: Antarmuka Jaringan SQL, kesalahan: 26 - Kesalahan Menemukan Server/Instans Ditentukan)"
Saran
Masalah ini telah diatasi dan perilaku sebelumnya dipulihkan di .NET Framework 4.6.2. Untuk menyambungkan ke database SQL Server yang mengarah ke localhost, tingkatkan ke .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Periode pemblokiran kumpulan koneksi untuk database Azure SQL dihapus
Detail lebih lanjut
Dimulai dengan .NET Framework 4.6.2, untuk permintaan buka koneksi ke database Azure SQL yang diketahui (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de), periode pemblokiran kumpulan koneksi dihapus, dan kesalahan buka koneksi tidak di-cache. Upaya untuk mencoba kembali permintaan terbuka koneksi akan terjadi segera setelah kesalahan koneksi sementara. Perubahan ini memungkinkan upaya terbuka koneksi untuk segera dicoba kembali untuk database Azure SQL, sehingga meningkatkan performa aplikasi dengan dukungan cloud. Untuk semua upaya koneksi lainnya, periode pemblokiran kumpulan koneksi terus diberlakukan.
Dalam .NET Framework 4.6.1 dan versi yang lebih lama, ketika aplikasi mengalami kegagalan koneksi sementara saat menyambungkan ke database, upaya koneksi tidak dapat dicoba kembali dengan cepat, karena kumpulan koneksi menyimpan kesalahan dan menumbuhkannya kembali selama 5 detik hingga 1 menit. Untuk informasi selengkapnya, lihat Kumpulan Koneksi SQL Server (ADO.NET). Perilaku ini menjadi masalah bagi koneksi ke database Azure SQL, yang sering gagal dengan kesalahan sementara yang biasanya dipulihkan dalam beberapa detik. Fitur pemblokiran kumpulan koneksi berarti bahwa aplikasi tidak dapat terhubung ke database untuk periode yang luas, meskipun database tersedia dan aplikasi perlu dirender dalam beberapa detik.
Saran
Jika perilaku ini tidak diinginkan, Anda dapat mengonfigurasi periode pemblokiran kumpulan koneksi dengan mengatur properti yang System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod diperkenalkan dalam .NET Framework 4.6.2. Nilai properti adalah anggota enumerasi System.Data.SqlClient.PoolBlockingPeriod yang dapat berupa salah satu dari tiga nilai:
Anda dapat memulihkan perilaku sebelumnya dengan mengatur properti ke System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriodAlwaysBlock.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Globalisasi
Kategori standar Unicode versi 8.0 sekarang didukung
Detail lebih lanjut
Di .NET Framework 4.6.2, data Unicode telah ditingkatkan dari Unicode Standard versi 6.3 ke versi 8.0. Saat meminta kategori karakter Unicode di .NET Framework 4.6.2, beberapa hasil mungkin tidak cocok dengan hasil dalam versi .NET Framework sebelumnya. Perubahan ini sebagian besar mempengaruhi suku kata Cherokee serta tanda vokal dan tanda nada New Tai Lue.
Saran
Tinjau kode dan hapus/ubah logika yang bergantung pada kategori karakter Unicode yang dikodekan secara permanen.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
- Char.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(String, Int32)
Keamanan
RSACng dan DSACng sekali lagi dapat digunakan dalam skenario Kepercayaan Parsial
Detail lebih lanjut
CngLightup (digunakan dalam beberapa api kripto tingkat lebih tinggi, seperti System.Security.Cryptography.Xml.EncryptedXml) dan System.Security.Cryptography.RSACng dalam beberapa kasus mengandalkan kepercayaan penuh. Ini termasuk P/Invokes tanpa menegaskan SecurityPermissionFlag.UnmanagedCode izin, dan jalur kode di mana System.Security.Cryptography.CngKey memiliki permintaan izin untuk SecurityPermissionFlag.UnmanagedCode. Dimulai dengan .NET Framework 4.6.2, CngLightup digunakan untuk beralih ke System.Security.Cryptography.RSACng sedapat mungkin. Akibatnya, aplikasi dengan kepercayaan parsial yang telah berhasil menggunakan System.Security.Cryptography.Xml.EncryptedXml mulai gagal dan melempar pengecualian SecurityException. Perubahan ini menambahkan pernyataan yang diperlukan agar semua fungsi yang menggunakan CngLightup memiliki izin yang diperlukan.
Saran
Jika perubahan ini dalam .NET Framework 4.6.2 berdampak negatif pada aplikasi kepercayaan parsial Anda, tingkatkan ke .NET Framework 4.7.1.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
- DSACng(CngKey)
- DSACng.Key
- DSACng.LegalKeySizes
- DSACng.CreateSignature(Byte[])
- DSACng.VerifySignature(Byte[], Byte[])
- RSACng(CngKey)
- RSACng.Key
- RSACng.Decrypt(Byte[], RSAEncryptionPadding)
- RSACng.SignHash(Byte[], HashAlgorithmName, RSASignaturePadding)
RSACng.VerifyHash sekarang mengembalikan False untuk kegagalan verifikasi apa pun
Detail lebih lanjut
Dimulai dengan .NET Framework 4.6.2, metode ini mengembalikan False jika tanda tangan itu sendiri diformat dengan buruk. Sekarang mengembalikan false untuk kegagalan verifikasi apa pun. Dalam .NET Framework 4.6 dan 4.6.1, metode melemparkan System.Security.Cryptography.CryptographicException jika tanda tangan itu sendiri diformat dengan buruk.
Saran
Kode apa pun yang eksekusinya tergantung pada penanganan System.Security.Cryptography.CryptographicException yang seharusnya dijalankan jika validasi gagal dan metode mengembalikan False.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Perubahan Pemecahan SignedXml dan EncryptedXml
Detail lebih lanjut
Di .NET Framework 4.6.2, perbaikan keamanan dalam System.Security.Cryptography.Xml.SignedXml dan System.Security.Cryptography.Xml.EncryptedXml mengakibatkan perilaku waktu proses yang berbeda. Contohnya:
- Jika dokumen memiliki beberapa elemen dengan atribut yang sama
iddan tanda tangan menargetkan salah satu elemen tersebut sebagai akar tanda tangan, dokumen sekarang akan dianggap tidak valid. - Dokumen yang menggunakan algoritma transformasi XPath non-kanonis dalam referensi sekarang dianggap tidak valid.
- Dokumen yang menggunakan algoritma transformasi XSLT non-kanonis dalam referensi sekarang dianggap tidak valid.
- Setiap program yang menggunakan tanda tangan sumber daya eksternal yang terpisah tidak akan dapat melakukannya.
Saran
Pengembang mungkin ingin meninjau penggunaan XmlDsigXsltTransform dan XmlDsigXsltTransform, serta jenis yang berasal dari Transform karena penerima dokumen mungkin tidak dapat memprosesnya.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
- System.Security.Cryptography.Xml.Transform
- System.Security.Cryptography.Xml.XmlDsigXPathTransform
- System.Security.Cryptography.Xml.XmlDsigXsltTransform
Windows Communication Foundation (WCF)
Menghapus Ssl3 dari WCF TransportDefaults
Detail lebih lanjut
Saat menggunakan NetTcp dengan keamanan transportasi dan jenis sertifikat kredensial, protokol SSL 3 tidak lagi menjadi protokol default yang digunakan untuk menegosiasikan koneksi yang aman. Dalam kebanyakan kasus, seharusnya tidak ada dampak pada aplikasi yang ada karena TLS 1.0 selalu disertakan dalam daftar protokol untuk NetTcp. Semua klien yang ada harus dapat menegosiasikan koneksi menggunakan setidaknya TLS1.0.
Saran
Jika Ssl3 diperlukan, gunakan salah satu mekanisme konfigurasi berikut untuk menambahkan Ssl3 ke daftar protokol yang dinegosiasikan.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Windows Presentation Foundation (WPF)
Mengubah properti IsEnabled dari induk kontrol TextBlock akan memengaruhi semua kontrol anak.
Detail lebih lanjut
Dimulai dengan .NET Framework 4.6.2, perubahan pada properti System.Windows.UIElement.IsEnabled dari kontrol induk System.Windows.Controls.TextBlock akan mempengaruhi kontrol turunan mana pun (seperti hyperlink dan tombol) dari kontrol System.Windows.Controls.TextBlock. Dalam .NET Framework 4.6.1 dan versi yang lebih lama, kontrol di dalam System.Windows.Controls.TextBlock tidak selalu mencerminkan status properti System.Windows.UIElement.IsEnabled dari induk System.Windows.Controls.TextBlock.
Saran
Tidak ada. Perubahan ini sesuai dengan perilaku yang diharapkan untuk pengontrol di dalam System.Windows.Controls.TextBlock kontrol.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
PaksaApakahKotakPemilihanDisorot
Detail lebih lanjut
Urutan tindakan tertentu yang melibatkan System.Windows.Controls.ComboBox dan sumber datanya dapat menghasilkan System.NullReferenceException.
Saran
Jika memungkinkan, tingkatkan ke .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6 |
| Tipe | Waktu Operasi |
API yang terpengaruh
DataGridCellsPanel.BringIndexIntoView menghasilkan ArgumentOutOfRangeException
Detail lebih lanjut
ScrollIntoView(Object) akan berfungsi secara asinkron ketika virtualisasi kolom diaktifkan tetapi lebar kolom belum ditentukan. Jika kolom dihapus sebelum pekerjaan asinkron terjadi, System.ArgumentOutOfRangeException dapat terjadi.
Saran
Salah satu hal berikut ini:
- Tingkatkan ke .NET Framework 4.7.
- Instal patch layanan terbaru untuk .NET Framework 4.6.2.
- Hindari menghapus kolom sampai respons asinkron ScrollIntoView(Object) selesai.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Pengguliran horizontal dan virtualisasi
Detail lebih lanjut
Perubahan ini berlaku untuk System.Windows.Controls.ItemsControl yang melakukan virtualisasi sendiri ke arah yang tegak lurus terhadap arah pengguliran utama (contoh utamanya adalah System.Windows.Controls.DataGrid dengan EnableColumnVirtualization="True"). Hasil operasi pengguliran horizontal tertentu telah diubah untuk menghasilkan hasil yang lebih intuitif dan lebih analog dengan hasil operasi vertikal yang sebanding.
Operasi yang dimaksud mencakup "Gulir Di Sini" dan "Tepi Kanan", dengan menggunakan nama pada menu yang diperoleh dengan mengklik kanan bilah gulir horizontal. Kedua metode ini menghitung offset kandidat dan memanggil SetHorizontalOffset(Double).
Setelah menggulir ke offset baru, konsep "di sini" atau "tepi kanan" mungkin telah berubah karena konten yang baru dide-virtualisasi telah mengubah nilai System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth.
Sebelum .NET Framework 4.6.2, operasi gulir hanya menggunakan nilai offset kandidat, meskipun mungkin sudah tidak 'di sini' atau di 'tepi kanan' lagi. Ini menghasilkan efek seperti "memantulkan" jempol gulir, paling baik ditunjukkan melalui contoh. Misalkan memiliki System.Windows.Controls.DataGrid ExtentWidth=1000 dan Width=200. Gulir ke "Tepi Kanan" menggunakan offset kandidat 1000 - 200 = 800. Saat menggulir ke offset tersebut, kolom baru tidak divirtualisasi; misalkan mereka sangat luas, sehingga perubahan pada System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth 2000. Gulir berakhir dengan HorizontalOffset=800, dan jempol "memantul" kembali ke dekat tengah bilah gulir - tepatnya pada 800/2000 = 40%.
Perubahannya adalah menghitung ulang offset kandidat baru ketika situasi ini terjadi, dan mencoba lagi. (Inilah cara kerja pengguliran vertikal.)
Perubahan menghasilkan pengalaman yang lebih dapat diprediksi dan intuitif untuk pengguna akhir, tetapi juga dapat memengaruhi aplikasi apa pun yang tergantung pada nilai System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset yang tepat setelah gulir horizontal, baik dipanggil oleh pengguna akhir atau dengan panggilan eksplisit ke SetHorizontalOffset(Double).
Saran
Aplikasi yang menggunakan nilai System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset yang diprediksi harus diubah untuk mengambil nilai aktual (dan nilai System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth) setelah gulir horizontal apa pun yang dapat mengubah System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth karena de-virtualisasi.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Items.Clear tidak menghapus duplikat dari SelectedItems
Detail lebih lanjut
Misalkan Pemilih (dengan beberapa pilihan diaktifkan) memiliki duplikat dalam koleksi System.Windows.Controls.Primitives.MultiSelector.SelectedItems - item yang sama muncul lebih dari sekali. Penghapusan item tersebut dari sumber data (misalnya, dengan memanggil Item.Clear) gagal menghapusnya dari System.Windows.Controls.Primitives.MultiSelector.SelectedItems; hanya instans pertama yang dihapus. Selain itu, penggunaan System.Windows.Controls.Primitives.MultiSelector.SelectedItems berikutnya (misalnya, SelectedItems.Clear()) dapat mengalami masalah seperti System.ArgumentException, karena System.Windows.Controls.Primitives.MultiSelector.SelectedItems berisi item yang tidak lagi berada dalam sumber data.
Saran
Tingkatkan jika memungkinkan ke .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.5 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Menggulir daftar item datar dengan tinggi piksel yang berbeda-beda
Detail lebih lanjut
System.Windows.Controls.ItemsControl Ketika menampilkan koleksi menggunakan virtualisasi (IsVirtualizing=true) dan pengguliran item (ScrollUnit=Item), serta saat kontrol menggulir untuk menunjukkan item yang tinggi pikselnya berbeda dari tetangganya, System.Windows.Controls.VirtualizingStackPanel mengiterasi semua item dalam koleksi. UI tidak responsif selama iterasi ini. Iterasi terjadi dalam keadaan lain, bahkan dalam rilis .NET Framework sebelumnya. Misalnya, itu terjadi ketika pengguliran piksel (ScrollUnit=Pixel) saat menemukan item dengan tinggi piksel yang berbeda, dan ketika menggulir item data hierarkis (seperti System.Windows.Controls.TreeView atau System.Windows.Controls.ItemsControl dengan pengelompokan diaktifkan) setelah menemukan item dengan jumlah item turunan yang berbeda dari tetangganya. Untuk kasus pengguliran item dan tinggi piksel yang berbeda, iterasi diperkenalkan dalam .NET Framework 4.6.1 untuk memperbaiki bug dalam tata letak data hierarkis. Tidak diperlukan jika data datar (tidak ada hierarki), dan .NET Framework 4.6.2 tidak melakukannya dalam kasus tersebut.
Saran
Jika iterasi terjadi di .NET Framework 4.6.1 tetapi tidak dalam rilis sebelumnya - yaitu, jika System.Windows.Controls.ItemsControl adalah item - menggulir daftar datar dengan item dengan tinggi piksel yang berbeda - ada dua solusi:
- Instal .NET Framework 4.6.2.
- Instal perbaikan HR 1605 untuk .NET Framework 4.6.1.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Kecil |
| Versi | 4.6.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Latar belakang Grup Pita diatur sebagai transparan pada build yang dilokalkan
Detail lebih lanjut
System.Windows.Controls.Ribbon.RibbonGroup latar belakang pada build yang dilokalkan selalu dicat dengan sikat Transparan, menghasilkan pengalaman UI yang buruk. Ini diperbaiki dalam .NET Framework 4.7 WPF dengan memperbarui sumber daya lokal untuk System.Windows.Controls.Ribbon.RibbonGroup, yang pada gilirannya memastikan pemilihan kuas yang tepat.
Saran
Tingkatkan ke .NET Framework 4.7
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.2 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.
Pemeriksaan Ejaan WPF gagal dengan cara yang tidak terduga
Detail lebih lanjut
Ini termasuk sejumlah masalah Pemeriksa Ejaan WPF:
- Pemeriksa Ejaan WPF terkadang menghasilkan kesalahan System.Runtime.InteropServices.COMException
- Pemeriksa Ejaan WPF gagal ketika aplikasi diluncurkan dengan UnauthorizedAccessException dijalankan sebagai pengguna berbeda
- Pemeriksa Ejaan WPF salah mengidentifikasi kesalahan ejaan dalam kata majemuk seperti 'Hausnummer' dalam bahasa Jerman.
Saran
Masalah #1 - Ini telah diperbaiki dalam .NET Framework 4.6.2. Masalah #2 - Pemeriksa Ejaan WPF tidak lagi didukung saat aplikasi diluncurkan menggunakan opsi 'jalankan sebagai pengguna yang berbeda'. Memulai .NET Framework 4.6.2, aplikasi yang diluncurkan dengan cara ini tidak akan lagi mengalami crash secara tiba-tiba - sebagai gantinya Pemeriksa Ejaan akan dinonaktifkan secara diam-diam. Masalah #3 - Ini telah diperbaiki di .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Ruang Lingkup | Edge |
| Versi | 4.6.1 |
| Tipe | Waktu Operasi |
API yang terpengaruh
Tidak dapat dideteksi melalui analisis API.