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,7, 4.7.1, dan 4.7.2.
.NET Framework 4.7
ASP.NET
HttpRuntime.AppDomainAppPath Melempar NullReferenceException
Rincian
Dalam .NET Framework 4.6.2, runtime melempar T:System.NullReferenceException saat mengambil nilai P:System.Web.HttpRuntime.AppDomainAppPath yang menyertakan karakter null. Dalam .NET Framework 4.6.1 dan versi yang lebih lama, runtime melemparkan T:System.ArgumentNullException.
Saran
Anda dapat melakukan salah satu hal berikut untuk merespons perubahan ini:
- Tangani
T:System.NullReferenceExceptionjika aplikasi Anda berjalan pada .NET Framework 4.6.2. - Tingkatkan ke .NET Framework 4.7, yang memulihkan perilaku sebelumnya dan melemparkan
T:System.ArgumentNullException.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.6.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Membatasi permintaan bersamaan per sesi
Rincian
Dalam .NET Framework 4.6.2 dan yang lebih lama, ASP.NET menjalankan permintaan dengan Sessionid yang sama secara berurutan, dan ASP.NET selalu mengeluarkan Sessionid melalui cookie secara default. Jika halaman membutuhkan waktu lama untuk merespons, itu akan secara signifikan menurunkan performa server hanya dengan menekan F5 di browser. Dalam perbaikan, kami menambahkan penghitung untuk melacak permintaan antrean dan mengakhiri permintaan ketika melebihi batas yang ditentukan. Nilai defaultnya adalah 50. Jika batas tercapai, peringatan akan dicatat di log peristiwa, dan respons HTTP 500 dapat dicatat di log IIS.
Saran
Untuk memulihkan perilaku lama, Anda dapat menambahkan pengaturan berikut ke file web.config Anda untuk menolak perilaku baru.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
Jaringan
Nilai default ServicePointManager.SecurityProtocol adalah SecurityProtocolType.System.Default
Rincian
Dimulai dengan aplikasi yang menargetkan .NET Framework 4.7, nilai default properti ServicePointManager.SecurityProtocol adalah SecurityProtocolType.SystemDefault. Perubahan ini memungkinkan API jaringan .NET Framework berdasarkan SslStream (seperti FTP, HTTPS, dan SMTP) untuk mewarisi protokol keamanan default dari sistem operasi alih-alih menggunakan nilai yang dikodekan secara permanen yang ditentukan oleh .NET Framework. Default bervariasi menurut sistem operasi dan konfigurasi kustom apa pun yang dilakukan oleh administrator sistem. Untuk informasi tentang protokol SChannel default di setiap versi sistem operasi Windows, lihat Protokol di TLS/SSL (Schannel SSP).
Untuk aplikasi yang menargetkan versi .NET Framework yang lebih lama, nilai default properti ServicePointManager.SecurityProtocol bergantung pada versi .NET Framework yang ditargetkan. Lihat bagian Networking pada Perubahan Penargetan Ulang untuk Migrasi dari .NET Framework 4.5.2 ke 4.6 untuk informasi lebih lanjut.Saran
Perubahan ini memengaruhi aplikasi yang menargetkan .NET Framework 4.7 atau versi yang lebih baru. Jika Anda lebih suka menggunakan protokol yang ditentukan daripada mengandalkan default sistem, Anda dapat secara eksplisit mengatur nilai properti ServicePointManager.SecurityProtocol. Jika perubahan ini tidak diinginkan, Anda dapat menolaknya dengan menambahkan pengaturan konfigurasi ke bagian<runtime> dan tombol pembatalan Switch.System.Net.DontEnableSystemDefaultTlsVersions.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
API yang terpengaruh
SslStream mendukung Pemberitahuan TLS
Rincian
Setelah jabat tangan TLS yang gagal, System.IO.IOException dengan pengecualian System.ComponentModel.Win32Exception dalam akan dilemparkan oleh operasi Baca/Tulis I/O pertama. Kode System.ComponentModel.Win32Exception.NativeErrorCode untuk System.ComponentModel.Win32Exception dapat dipetakan ke Peringatan TLS dari pihak eksternal dengan menggunakan kode kesalahan Schannel untuk peringatan TLS dan SSL. Untuk informasi selengkapnya, lihat RFC 2246: Bagian 7.2.2 Peringatan kesalahan.
Perilaku dalam .NET Framework 4.6.2 dan yang lebih lama adalah bahwa saluran transport (biasanya koneksi TCP) akan mengalami batas waktu saat Penulisan atau Pembacaan jika pihak lain gagal melakukan jabat tangan dan langsung menolak koneksi.
Saran
Aplikasi yang memanggil API I/O jaringan seperti Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) harus menangani IOException atau System.TimeoutException.
Fitur Pemberitahuan TLS diaktifkan secara default dimulai dengan .NET Framework 4.7. Aplikasi yang menargetkan versi .NET Framework dari 4.0 hingga 4.6.2 yang berjalan pada sistem .NET Framework 4.7 atau yang lebih tinggi akan menonaktifkan fitur untuk mempertahankan kompatibilitas.
API konfigurasi berikut tersedia untuk mengaktifkan atau menonaktifkan fitur untuk aplikasi .NET Framework 4.6 dan yang lebih baru yang berjalan pada .NET Framework 4.7 atau yang lebih baru.
Secara terprogram: Harus menjadi hal pertama yang dilakukan aplikasi karena ServicePointManager hanya akan menginisialisasi sekali:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);AppConfig:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/> <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. --> </runtime>Kunci registri (global komputer): Atur Nilai ke
falseuntuk mengaktifkan fitur di .NET Framework 4.6 - 4.6.2.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
API yang terpengaruh
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Keamanan
CspParameters.ParentWindowHandle sekarang mengharapkan nilai HWND
Rincian
Nilai ParentWindowHandle, yang diperkenalkan dalam .NET Framework 2.0, memungkinkan aplikasi untuk mendaftarkan nilai handle jendela induk sehingga UI apa pun yang diperlukan untuk autentikasi kunci (seperti perintah PIN atau dialog persetujuan) terbuka sebagai jendela anak modal ke jendela yang ditentukan. Dimulai dengan aplikasi yang menargetkan .NET Framework 4.7, aplikasi Formulir Windows dapat mengatur properti ParentWindowHandle dengan kode seperti berikut:
cspParameters.ParentWindowHandle = form.Handle;
Dalam versi .NET Framework sebelumnya, nilai diharapkan menjadi
Saran
Aplikasi yang menargetkan .NET Framework 4.7 atau yang lebih tinggi yang ingin mendaftarkan hubungan jendela induk didorong untuk menggunakan formulir yang disederhanakan:
cspParameters.ParentWindowHandle = form.Handle;
Pengguna yang telah mengidentifikasi bahwa nilai yang benar untuk diteruskan adalah alamat lokasi memori yang menyimpan nilai form.Handle dapat menolak perubahan perilaku dengan mengatur sakelar AppContext Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle ke true:
- Dengan mengatur sakelar kompat secara terprogram pada AppContext, seperti yang dijelaskan dalam Pengumuman .NET di Build 2015.
- Dengan menambahkan baris berikut ke dalam bagian
<runtime>pada file app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>
Sebaliknya, pengguna yang ingin ikut serta dalam perilaku baru pada runtime .NET Framework 4.7 ketika aplikasi dijalankan pada versi .NET Framework yang lebih lama dapat mengatur sakelar AppContext ke false.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
API yang terpengaruh
SslStream mendukung Pemberitahuan TLS
Rincian
Setelah jabat tangan TLS yang gagal, System.IO.IOException dengan pengecualian System.ComponentModel.Win32Exception dalam akan dilemparkan oleh operasi Baca/Tulis I/O pertama. Kode System.ComponentModel.Win32Exception.NativeErrorCode untuk System.ComponentModel.Win32Exception dapat dipetakan ke Peringatan TLS dari pihak eksternal dengan menggunakan kode kesalahan Schannel untuk peringatan TLS dan SSL. Untuk informasi selengkapnya, lihat RFC 2246: Bagian 7.2.2 Peringatan kesalahan.
Perilaku dalam .NET Framework 4.6.2 dan yang lebih lama adalah bahwa saluran transport (biasanya koneksi TCP) akan mengalami batas waktu saat Penulisan atau Pembacaan jika pihak lain gagal melakukan jabat tangan dan langsung menolak koneksi.
Saran
Aplikasi yang memanggil API I/O jaringan seperti Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) harus menangani IOException atau System.TimeoutException.
Fitur Pemberitahuan TLS diaktifkan secara default dimulai dengan .NET Framework 4.7. Aplikasi yang menargetkan versi .NET Framework dari 4.0 hingga 4.6.2 yang berjalan pada sistem .NET Framework 4.7 atau yang lebih tinggi akan menonaktifkan fitur untuk mempertahankan kompatibilitas.
API konfigurasi berikut tersedia untuk mengaktifkan atau menonaktifkan fitur untuk aplikasi .NET Framework 4.6 dan yang lebih baru yang berjalan pada .NET Framework 4.7 atau yang lebih baru.
Secara terprogram: Harus menjadi hal pertama yang dilakukan aplikasi karena ServicePointManager hanya akan menginisialisasi sekali:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);AppConfig:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/> <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. --> </runtime>Kunci registri (global komputer): Atur Nilai ke
falseuntuk mengaktifkan fitur di .NET Framework 4.6 - 4.6.2.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
API yang terpengaruh
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Windows Communication Foundation (WCF)
Serialisasi karakter kontrol dengan DataContractJsonSerializer sekarang kompatibel dengan ECMAScript V6 dan V8
Rincian
Dalam .NET Framework 4.6.2 dan versi yang lebih lama, System.Runtime.Serialization.Json.DataContractJsonSerializer tidak menserialisasikan beberapa karakter kontrol khusus, seperti \b, \f, dan \t, dengan cara yang kompatibel dengan standar ECMAScript V6 dan V8. Dimulai dengan .NET Framework 4.7, serialisasi karakter kontrol ini kompatibel dengan ECMAScript V6 dan V8.
Saran
Untuk aplikasi yang menargetkan .NET Framework 4.7, fitur ini diaktifkan secara default. Jika perilaku ini tidak diinginkan, Anda dapat memilih keluar dari fitur ini dengan menambahkan baris berikut ke bagian <runtime> file app.config atau web.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
API yang terpengaruh
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
Keamanan pesan WCF sekarang dapat menggunakan TLS1.1 dan TLS1.2
Rincian
Mulai dari .NET Framework 4.7, pelanggan dapat mengonfigurasi TLS1.1 atau TLS1.2 dalam keamanan pesan WCF selain SSL3.0 dan TLS1.0 melalui pengaturan konfigurasi aplikasi.
Saran
Dalam .NET Framework 4.7, dukungan untuk TLS1.1 dan TLS1.2 dalam keamanan pesan WCF dinonaktifkan secara default. Anda dapat mengaktifkannya dengan menambahkan baris berikut ke bagian <runtime> file app.config atau web.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
Windows Presentation Foundation (WPF)
Panggilan ke System.Windows.Input.PenContext.Disable pada sistem yang memiliki fitur sentuhan dapat menghasilkan ArgumentException
Rincian
Dalam beberapa keadaan, panggilan ke metode internal System.Windows.Input.PenContext.Disable pada sistem yang mendukung sentuhan dapat memunculkan T:System.ArgumentException yang tidak tertangani karena reentransi.
Saran
Masalah ini telah diatasi dalam .NET Framework 4.7. Untuk mencegah pengecualian, tingkatkan ke versi .NET Framework yang dimulai dengan .NET Framework 4.7.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.6.1 |
| Jenis | Penargetan ulang |
NullReferenceException dalam kode penanganan pengecualian dari ImageSourceConverter.ConvertFrom
Rincian
Kesalahan dalam kode penanganan pengecualian untuk ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) menyebabkan System.NullReferenceException salah dilemparkan alih-alih pengecualian yang dimaksudkan ( System.IO.DirectoryNotFoundException atau System.IO.FileNotFoundException). Perubahan ini memperbaiki kesalahan tersebut sehingga metode sekarang melemparkan pengecualian yang tepat.
Secara default semua aplikasi yang menargetkan .NET Framework 4.6.2 dan yang lebih lama terus melemparkan System.NullReferenceException untuk kompatibilitas. Pengembang yang menargetkan .NET Framework 4.7 ke atas akan melihat pengecualian yang tepat.
Saran
Pengembang yang ingin kembali mendapatkan System.NullReferenceException saat menargetkan .NET Framework 4.7 atau yang lebih baru dapat menambahkan/menggabungkan yang berikut ke file App.config aplikasi mereka:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Alokasi ruang Grid WPF untuk kolom berbintang
Rincian
Dimulai dengan .NET Framework 4.7, WPF menggantikan algoritma yang Grid gunakan untuk mengalokasikan ruang ke *-kolom. Ini akan mengubah lebar sebenarnya yang ditetapkan ke *-kolom dalam sejumlah kasus.
- Ketika satu atau beberapa *-kolom juga memiliki lebar minimum atau maksimum yang mengambil alih alokasi proporsional untuk kolom tersebut. (Lebar minimum dapat berasal dari deklarasi MinWidth eksplisit, atau dari minimum implisit yang diperoleh dari konten kolom. Lebar maksimum hanya dapat ditentukan secara eksplisit, dari deklarasi MaxWidth.)
- Ketika satu atau beberapa *-kolom menyatakan *-bobot yang sangat besar, lebih besar dari 10^298.
- Ketika *-bobot cukup berbeda untuk mengalami ketidakstabilan floating-point (luapan, aliran bawah, hilangnya presisi).
- Ketika pembulatan tata letak diaktifkan, dan DPI tampilan efektif cukup tinggi. Dalam dua kasus pertama, lebar yang dihasilkan oleh algoritma baru dapat secara signifikan berbeda dari yang dihasilkan oleh algoritma lama; dalam kasus terakhir, perbedaannya adalah paling banyak satu atau dua piksel.
Algoritma baru memperbaiki beberapa bug yang ada dalam algoritma lama:
Alokasi total ke kolom dapat melebihi lebar Grid. Ini dapat terjadi ketika mengalokasikan ruang ke kolom yang proporsi bagiannya kurang dari ukuran minimumnya. Algoritma mengalokasikan ukuran minimum, yang mengurangi ruang yang tersedia untuk kolom lain. Jika tidak ada *-kolom yang tersisa untuk dialokasikan, total alokasi akan terlalu besar.
Total alokasi dapat kurang dari lebar grid. Ini adalah permasalahan ganda dari #1, muncul ketika mengalokasikan ke kolom yang bagian proporsionalnya lebih besar dari ukuran maksimumnya, tanpa kolom *-tersisa untuk menyerap kekurangan.
Dua *-kolom dapat menerima alokasi yang tidak sebanding dengan *-bobotnya. Ini adalah versi yang lebih ringan dari #1/#2, muncul saat mengalokasikan ke *-kolom A, B, dan C (dalam urutan tersebut), di mana bagian proporsional B melampaui batasan minimumnya (atau maksimumnya). Seperti di atas, ini mengubah ruang yang tersedia untuk kolom C, yang menerima alokasi proporsional lebih sedikit (atau lebih banyak) dibandingkan kolom A.
Kolom dengan bobot yang sangat besar (> 10^298) semuanya diperlakukan seolah-olah beratnya 10^298. Perbedaan proporsional di antaranya (dan di antara kolom dengan bobot yang sedikit lebih kecil) tidak dihormati.
Kolom dengan bobot tak terbatas tidak ditangani dengan benar. (Sebenarnya Anda tidak dapat mengatur berat ke tak terhingga, tetapi ini adalah pembatasan buatan. Kode alokasi mencoba menanganinya, tetapi melakukannya dengan kurang baik.)
Beberapa masalah kecil saat menghindari luapan, aliran bawah, hilangnya presisi, dan masalah floating-point serupa.
Penyesuaian untuk pembulatan tata letak salah pada DPI yang cukup tinggi. Algoritma baru menghasilkan hasil yang memenuhi kriteria berikut:
- Lebar aktual yang ditetapkan ke *-kolom tidak pernah kurang dari lebar minimumnya atau lebih besar dari lebar maksimumnya.
- Setiap *-kolom yang tidak ditetapkan lebar minimum atau maksimumnya diberi lebar sebanding dengan *-bobotnya. Untuk lebih tepatnya, jika dua kolom dinyatakan dengan lebar x* dan y* masing-masing, dan jika tidak ada kolom yang menerima lebar minimum atau maksimumnya, lebar aktual v dan w yang ditetapkan ke kolom berada dalam proporsi yang sama: v / w == x / y.
- Lebar total yang dialokasikan ke *-kolom "proporsional" sama dengan ruang yang tersedia setelah mengalokasikan ke kolom yang dibatasi (kolom tetap, otomatis, dan *yang dialokasikan lebar min atau maksnya). Ini mungkin nol, misalnya jika jumlah lebar minimum melebihi lebar kisi yang tersedia.
- Semua pernyataan ini harus ditafsirkan sehubungan dengan tata letak "ideal". Saat pembulatan tata letak berlaku, lebar aktual dapat berbeda dari lebar ideal sebanyak satu piksel.
Nota
Semua yang dikatakan tentang kolom dan lebar dalam artikel ini berlaku juga untuk baris dan tinggi.
Saran
Secara default, aplikasi yang menargetkan versi .NET Framework yang dimulai dengan .NET Framework 4.7 akan melihat algoritma baru, sementara aplikasi yang menargetkan .NET Framework 4.6.2 atau versi yang lebih lama akan melihat algoritma lama.
Untuk mengambil alih default, gunakan pengaturan konfigurasi berikut:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Nilai true memilih algoritma lama, false memilih algoritma baru.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
Tumpukan Sentuh Pointer-Based WPF
Rincian
Perubahan ini menambahkan kemampuan untuk mengaktifkan tumpukan sentuh/stylus WPF berbasis WM_POINTER opsional. Pengembang yang tidak secara eksplisit mengaktifkan ini tidak akan melihat perubahan perilaku sentuh/stylus WPF. Masalah umum saat ini Dengan sentuhan/tumpukan stylus berbasis WM_POINTER opsional:
- Tidak ada dukungan untuk penintaan real time.
- Meskipun penintaan dan StylusPlugins masih akan berfungsi, mereka akan diproses pada utas antarmuka pengguna (UI Thread) yang dapat menyebabkan kinerja yang buruk.
- Perubahan perilaku karena perubahan promosi dari peristiwa sentuhan/stylus ke peristiwa mouse
- Manipulasi dapat berperilaku berbeda
- Seret/Jatuhkan tidak akan menampilkan umpan balik yang sesuai untuk input sentuhan
- Ini tidak memengaruhi input stylus
- Seret/Jatuhkan tidak bisa lagi diaktifkan pada interaksi sentuhan atau stylus
- Hal ini berpotensi menyebabkan aplikasi berhenti merespons hingga input mouse terdeteksi.
- Sebagai gantinya, pengembang harus memulai seret dan lepas dari event mouse.
Saran
Pengembang yang ingin mengaktifkan tumpukan ini dapat menambahkan/menggabungkan yang berikut ke file App.config aplikasi mereka:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>
Menghapus ini atau mengatur nilai ke false akan menonaktifkan tumpukan opsional ini. Perhatikan bahwa tumpukan ini hanya tersedia pada Pembaruan Pembuat Windows 10 ke atas.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
Windows Workflow Foundation (WF)
Checksum alur kerja diubah dari MD5 ke SHA1
Rincian
Untuk mendukung penelusuran kesalahan dengan Visual Studio, runtime Alur Kerja menghasilkan checksum untuk instans alur kerja menggunakan algoritma hashing. Dalam .NET Framework 4.6.2 dan versi yang lebih lama, hashing checksum workflow menggunakan algoritma MD5, yang menyebabkan masalah pada sistem yang mengaktifkan FIPS. Dimulai dengan .NET Framework 4.7, algoritmanya adalah SHA1. Jika kode Anda telah mempertahankan checksum ini, kode tersebut tidak akan kompatibel.
Saran
Jika kode Anda tidak dapat memuat instans alur kerja karena kegagalan pengecekan checksum, coba atur parameter AppContext "Switch.System.Activities.UseMD5ForWFDebugger" ke 'true'. Dalam kode:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
Atau dalam konfigurasi:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7 |
| Jenis | Penargetan ulang |
.NET Framework 4.7.1
ASP.NET
ASP.NET Peningkatan Aksesibilitas di .NET Framework 4.7.1
Rincian
Dimulai dengan .NET Framework 4.7.1, ASP.NET telah meningkatkan cara ASP.NET Web Control bekerja dengan teknologi aksesibilitas di Visual Studio untuk mendukung pelanggan ASP.NET dengan lebih baik. Ini termasuk perubahan berikut:
- Perubahan untuk menerapkan pola aksesibilitas UI yang hilang dalam kontrol, seperti dialog Tambahkan Bidang di wizard Tampilan Detail, atau dialog Konfigurasi Tampilan Daftar di wizard Tampilan Daftar.
- Perubahan untuk meningkatkan tampilan dalam mode Kontras Tinggi, seperti Editor Bidang-bidang pada Pager Data.
- Perubahan untuk meningkatkan pengalaman penggunaan navigasi keyboard pada kontrol, seperti dialog Bidang di wizard Edit Bidang Pager dari kontrol DataPager, dialog Konfigurasi ObjectContext, atau dialog Konfigurasi Pemilihan Data dalam wizard Konfigurasi Sumber Data.
Saran
Cara ikut serta atau keluar dari perubahan ini Agar Visual Studio Designer mendapatkan manfaat dari perubahan ini, perubahan harus berjalan pada .NET Framework 4.7.1 atau yang lebih baru. Aplikasi web dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Instal Visual Studio 2017 15.3 atau yang lebih baru, yang mendukung fitur aksesibilitas baru dengan AppContext Switch berikut secara default.
- Menolak perilaku aksesibilitas warisan dengan menambahkan sakelar AppContext
Switch.UseLegacyAccessibilityFeatureske bagian<runtime>di file devenv.exe.config dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
...
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false' -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
...
</runtime>
</configuration>
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dan ingin mempertahankan perilaku aksesibilitas warisan dapat memilih untuk menggunakan fitur aksesibilitas warisan dengan secara eksplisit mengatur sakelar AppContext ini ke true.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
Inti
Pengecualian pada thread latar belakang SerialPort
Rincian
Thread latar belakang yang dibuat dengan stream SerialPort tidak lagi mengakhiri proses ketika terjadi pengecualian OS.
Dalam aplikasi yang ditargetkan untuk .NET Framework 4.7 dan versi sebelumnya, proses akan dihentikan ketika pengecualian sistem operasi terjadi pada utas latar belakang yang dibuat dengan aliran SerialPort.
Dalam aplikasi yang menargetkan .NET Framework 4.7.1 atau versi yang lebih baru, utas latar belakang menunggu peristiwa OS yang terkait dengan port serial aktif dan dapat mengalami crash dalam beberapa kasus, seperti penghapusan tiba-tiba port serial.
Saran
Untuk aplikasi yang menargetkan .NET Framework 4.7.1, Anda dapat menolak penanganan pengecualian jika tidak diinginkan dengan menambahkan yang berikut ini ke bagian <runtime> file app.config Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework sebelumnya tetapi berjalan pada .NET Framework 4.7.1 atau yang lebih baru, Anda dapat ikut serta dalam penanganan pengecualian dengan menambahkan yang berikut ini ke bagian <runtime> file app.config Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
ServiceBase tidak menyebarluaskan pengecualian OnStart
Rincian
Dalam .NET Framework 4.7 dan versi sebelumnya, pengecualian yang dilemparkan pada startup layanan tidak diteruskan ke pemanggil ServiceBase.Run.
Dimulai dengan aplikasi yang menargetkan .NET Framework 4.7.1, runtime menyebarkan pengecualian ke ServiceBase.Run untuk layanan yang gagal dimulai.
Saran
Pada awal layanan, jika ada pengecualian, pengecualian tersebut akan disebarluaskan. Ini akan membantu mendiagnosis kasus di mana layanan gagal dimulai.
Jika perilaku ini tidak diinginkan, Anda dapat menolaknya dengan menambahkan elemen AppContextSwitchOverrides berikut ke bagian runtime file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />
Jika aplikasi Anda menargetkan versi yang lebih lama dari 4.7.1 tetapi Anda ingin memiliki perilaku ini, tambahkan elemen AppContextSwitchOverrides berikut ke bagian runtime file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Keamanan
Algoritma SignedXML dan SignedXMS default berubah menjadi SHA256
Rincian
Di .NET Framework 4.7 dan yang lebih lama, SignedXML dan SignedCMS default ke SHA1 untuk beberapa operasi. Dimulai dengan .NET Framework 4.7.1, SHA256 diaktifkan secara default untuk operasi ini. Perubahan ini diperlukan karena SHA1 tidak lagi dianggap aman.
Saran
Ada dua nilai pengalihan konteks baru untuk mengontrol apakah SHA1 (tidak aman) atau SHA256 digunakan secara default:
- Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
- Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms Untuk aplikasi yang menargetkan .NET Framework 4.7.1 dan versi yang lebih baru, jika penggunaan SHA256 tidak diinginkan, Anda dapat memulihkan default ke SHA1 dengan menambahkan sakelar konfigurasi berikut ke bagian runtime
file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />
Untuk aplikasi yang menargetkan .NET Framework 4.7 dan versi yang lebih lama, Anda dapat memilih perubahan ini dengan menambahkan sakelar konfigurasi berikut ke bagian runtime
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
SignedXml.GetPublicKey mengembalikan RSACng pada net462 (atau lightup) tanpa perubahan penargetan ulang.
Rincian
Dimulai dengan .NET Framework 4.6.2, jenis konkret objek yang dikembalikan oleh metode SignedXml.GetPublicKey berubah (tanpa quirk) dari implementasi CryptoServiceProvider ke implementasi Cng. Ini karena implementasi berubah dari menggunakan certificate.PublicKey.Key menjadi menggunakan certificate.GetAnyPublicKey internal yang diteruskan ke RSACertificateExtensions.GetRSAPublicKey.
Saran
Dimulai dengan aplikasi yang berjalan pada .NET Framework 4.7.1, Anda dapat menggunakan implementasi CryptoServiceProvider yang digunakan secara default di .NET Framework 4.6.1 dan versi yang lebih lama dengan menambahkan sakelar konfigurasi berikut ke bagian runtime
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.6.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Windows Communication Foundation (WCF)
Aksesibilitas yang ditingkatkan untuk beberapa alat .NET SDK
Rincian
Dalam .NET Framework SDK 4.7.1, alat SvcConfigEditor.exe dan SvcTraceViewer.exe telah ditingkatkan dengan memperbaiki berbagai masalah aksesibilitas. Sebagian besar adalah masalah kecil seperti nama yang tidak ditentukan atau pola otomatisasi UI tertentu tidak diimplementasikan dengan benar. Meskipun banyak pengguna tidak akan menyadari nilai-nilai yang salah ini, pelanggan yang menggunakan teknologi bantuan seperti pembaca layar akan menemukan alat SDK ini lebih mudah diakses. Tentu saja, perbaikan ini mengubah beberapa perilaku sebelumnya, seperti urutan fokus keyboard. Untuk mendapatkan semua perbaikan aksesibilitas di alat-alat ini, Anda dapat melakukan hal berikut ke file app.config Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
Formulir Windows
Peningkatan aksesibilitas dalam kontrol Formulir Windows
Rincian
Formulir Windows meningkatkan cara kerjanya dengan teknologi aksesibilitas untuk mendukung pelanggan Formulir Windows dengan lebih baik. Ini termasuk perubahan berikut yang dimulai dengan .NET Framework 4.7.1:
- Perubahan untuk meningkatkan tampilan selama mode Kontras Tinggi.
- Perubahan untuk meningkatkan pengalaman penjelajah properti. Peningkatan peramban properti meliputi:
- Navigasi keyboard yang lebih baik melalui berbagai jendela pilihan drop-down.
- Mengurangi perhentian tab yang tidak perlu.
- Peningkatan pelaporan jenis kontrol.
- Perilaku narator yang ditingkatkan.
- Perubahan untuk menerapkan pola aksesibilitas UI yang belum ada pada kontrol.
Saran
Cara ikut serta atau keluar dari perubahan ini Agar aplikasi mendapatkan manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.7.1 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Ini dikompresi ulang untuk menargetkan .NET Framework 4.7.1. Perubahan aksesibilitas ini diaktifkan secara default pada aplikasi Formulir Windows yang menargetkan .NET Framework 4.7.1 atau yang lebih baru.
- Ini menolak perilaku aksesibilitas warisan dengan menambahkan sakelar AppContext berikut ke bagian
<runtime>file app.config dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<?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.UseLegacyAccessibilityFeatures=false" />
</runtime>
</configuration>
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dan ingin mempertahankan perilaku aksesibilitas warisan dapat memilih untuk menggunakan fitur aksesibilitas warisan dengan secara eksplisit mengatur sakelar AppContext ini ke true.
Untuk gambaran umum otomatisasi UI, lihat Gambaran Umum Automasi UI .
Dukungan ditambahkan untuk pola dan properti Automasi UI
Klien aksesibilitas dapat memanfaatkan fungsionalitas aksesibilitas WinForms baru dengan menggunakan pola pemanggilan umum yang dijelaskan secara publik. Pola-pola ini tidak spesifik untuk WinForms. Misalnya, klien aksesibilitas dapat memanggil metode QueryInterface pada antarmuka IAccessible (MAAS) untuk mendapatkan antarmuka IServiceProvider. Jika antarmuka ini tersedia, klien dapat menggunakan metode QueryService-nya untuk meminta antarmuka IAccessibleEx. Untuk informasi selengkapnya, lihat Menggunakan IAccessibleEx oleh Klien. Dimulai dengan .NET Framework 4.7.1, IServiceProvider dan IAccessibleEx (jika berlaku) tersedia untuk objek aksesibilitas WinForms.
.NET Framework 4.7.1 menambahkan dukungan untuk pola dan properti otomatisasi UI berikut:
Kontrol ToolStripSplitButton dan ComboBox mendukung pola Perluas/Ciutkan.
Kontrol ToolStripMenuItem memiliki nilai properti ControlTypeControlType.MenuItem.
Kontrol ToolStripItem mendukung properti NameProperty dan polaPerluas/Ciutkan.
Kontrol ToolStripDropDownItem mendukung AccessibleEvents yang menunjukkan StateChange dan NameChange ketika menu drop-down dibuka atau ditutup.
Kontrol ToolStripDropDownButton memiliki nilai properti ControlTypeControlType.MenuItem.
Kontrol DataGridViewCheckBoxCell mendukung TogglePattern.
Kontrol NumericUpDown dan DomainUpDown mendukung properti NameProperty dan memiliki tipe kontrol dari ControlType.Spinner.
Peningkatan pada kontrol PropertyGrid .NET Framework 4.7.1 menambahkan peningkatan berikut ke kontrol PropertyBrowser:Tombol Detail
dalam dialog kesalahan yang ditampilkan saat pengguna memasukkan nilai yang salah dalam kontrol mendukung pola Perluas/Ciutkan , pemberitahuan perubahan status dan nama, dan propertiControlType dengan nilai. Panel pesan ketika tombol Detail pada dialog kesalahan diperluas sekarang dapat diakses papan ketik dan memungkinkan Narrator untuk mengumumkan konten pesan kesalahan.
Jumlah AccessibleRole baris dalam kontrol PropertyGrid telah berubah dari "Baris" menjadi "Sel". Sel dipetakan ke UIA ControlType "DataItem", yang memungkinkan sel ini untuk mendukung pintasan keyboard dan pengumuman Narrator yang sesuai.
Baris kontrol PropertyGrid yang mewakili item header ketika kontrol PropertyGrid memiliki properti PropertySort yang diatur ke PropertySort.Categorized memiliki nilai properti ControlType dari ControlType.Button.
Baris kontrol PropertyGrid yang mewakili item header saat kontrol PropertyGrid memiliki properti PropertySort yang diatur ke PropertySort.Categorized mendukung pola Perluas/Ciutkan .
Peningkatan navigasi keyboard antara grid dan ToolBar di atasnya. Menekan "Shift-Tab" sekarang memilih tombol ToolBar pertama, bukan seluruh ToolBar.
PropertyGrid kontrol yang ditampilkan dalam mode Kontras Tinggi sekarang akan menggambar kotak fokus mengelilingi tombol Toolbar yang sesuai dengan nilai properti PropertySort saat ini.
Kontrol PropertyGrid yang ditampilkan dalam mode Kontras Tinggi dan dengan properti PropertySort diatur ke PropertySort.Categorized sekarang akan menampilkan latar belakang kepala kategori dalam warna yang sangat kontras.
PropertyGrid lebih baik dalam mengontrol dan membedakan antara item ToolBar yang memiliki fokus dengan item ToolBar yang menunjukkan nilai properti PropertySort saat ini. Perbaikan ini terdiri dari perubahan Kontras Tinggi dan perubahan untuk skenario Kontras Non-Tinggi.
Item ToolBar yang dikendalikan oleh PropertyGrid menunjukkan nilai saat ini dari properti PropertySort dan mendukung TogglePattern.
Dukungan Narator yang ditingkatkan untuk membedakan perataan yang dipilih di Alat Pemilih Perataan.
Ketika kontrol PropertyGrid yang kosong ditampilkan pada formulir, sekarang akan menerima fokus, berbeda dengan sebelumnya yang tidak demikian.
Penggunaan warna yang ditentukan OS dalam tema Kontras Tinggi
- Kontrol Button dan CheckBox dengan properti FlatStyle diatur ke FlatStyle.System, yang merupakan gaya default, sekarang gunakan warna yang ditentukan OS dalam tema Kontras Tinggi saat dipilih. Sebelumnya, warna teks dan latar belakang tidak kontras dan sulit dibaca.
- Kontrol Button, CheckBox, RadioButton, Label, LinkLabel, dan GroupBox dengan properti Enabled diatur ke false menggunakan warna bayangan untuk merender teks dalam tema Kontras Tinggi, menghasilkan kontras rendah terhadap latar belakang. Sekarang kontrol ini menggunakan warna "Teks Dinonaktifkan" yang ditentukan oleh OS. Perbaikan ini berlaku untuk kontrol dengan properti
FlatStylediatur ke nilai selain FlatStyle.System. Kontrol yang disebutkan terakhir dirender oleh sistem operasi. - DataGridView sekarang merender persegi panjang yang terlihat di sekitar konten sel yang sedang fokus saat ini. Sebelumnya, ini tidak terlihat dalam tema Kontras Tinggi tertentu.
- ToolStripMenuItem kontrol yang propertinya Enabled diatur ke false sekarang menggunakan warna "Teks Dinonaktifkan" yang ditentukan oleh OS.
- ToolStripMenuItem elemen dengan properti Checked disetel ke true sekarang merender penanda centang terkait dalam warna sistem yang kontras. Sebelumnya warna tanda centang tidak cukup kontras dan tidak terlihat dalam tema Kontras Tinggi. CATATAN: Windows 10 telah mengubah nilai untuk beberapa warna sistem kontras tinggi. Formulir Windows Framework didasarkan pada kerangka kerja Win32. Untuk pengalaman terbaik, jalankan pada versi terbaru Windows dan ikut serta dalam perubahan OS terbaru dengan menambahkan file app.manifest dalam aplikasi pengujian dan membatalkan komentar kode berikut:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
navigasi keyboard yang disempurnakan
- Ketika kontrol ComboBox memiliki properti DropDownStyle diatur ke ComboBoxStyle.DropDownList dan merupakan kontrol pertama dalam urutan tabulasi pada formulir, akan menampilkan persegi panjang fokus saat formulir induk dibuka dengan papan ketik. Sebelum perubahan ini, fokus keyboard ada pada kontrol ini, tetapi indikator fokusnya tidak ditampilkan.
Dukungan Narator yang Ditingkatkan
Kontrol MonthCalendar telah menambahkan dukungan untuk teknologi bantu agar kontrol dapat diakses, termasuk kemampuan bagi Narator untuk membaca nilai kontrol yang sebelumnya tidak dapat diakses.
Kontrol CheckedListBox sekarang memberi tahu Narator ketika properti CheckBox.CheckState telah diubah. Sebelumnya, Narator tidak menerima pemberitahuan dan akibatnya pengguna tidak akan diberi tahu bahwa properti CheckState telah diperbarui.
Kontrol LinkLabel telah mengubah cara memberi tahu Narator tentang teks dalam kontrol. Sebelumnya, Narator mengumumkan teks ini dua kali dan membaca simbol "&" sebagai teks nyata meskipun tidak terlihat oleh pengguna. Teks duplikat dihapus dari pengumuman Narator, serta simbol "&" yang tidak perlu.
Jenis kontrol DataGridViewCell sekarang melaporkan status baca-saja dengan benar ke Narator dan teknologi bantuan lainnya.
Narator sekarang dapat membaca Menu Sistem jendela anak di aplikasi [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md).
Narator sekarang dapat membaca kontrol ToolStripMenuItem dengan properti ToolStripItem.Enabled diatur ke nilai false. Sebelumnya, Narator tidak dapat fokus pada item menu yang dinonaktifkan untuk membaca konten.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Utama |
| Versi | 4.8 |
| Jenis | Penargetan ulang |
API yang terpengaruh
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
Windows Presentation Foundation (WPF)
Peningkatan aksesibilitas di WPF
Rincian
Peningkatan Kontras Tinggi
- Fokus untuk pengendalian Expander kini dapat terlihat. Di versi .NET Framework sebelumnya, itu tidak.
- Teks dalam kontrol CheckBox dan RadioButton saat dipilih sekarang lebih mudah dilihat daripada di versi .NET Framework sebelumnya.
- Batas ComboBox yang dinonaktifkan sekarang berwarna sama dengan teks yang dinonaktifkan. Di versi .NET Framework sebelumnya, itu tidak.
- Tombol yang dinonaktifkan dan difokuskan sekarang menggunakan warna tema yang benar. Di versi .NET Framework sebelumnya, mereka tidak.
- Tombol dropdown sekarang terlihat saat gaya elemen kontrol ComboBox diatur menjadi ToolBar.ComboBoxStyleKey. Di versi .NET Framework sebelumnya, itu tidak.
- Panah indikator pengurutan dalam kontrol DataGrid sekarang menggunakan warna tema. Pada versi .NET Framework sebelumnya, fitur tersebut belum ada.
- Gaya hyperlink bawaan sekarang berubah menjadi warna tema yang benar ketika penunjuk diarahkan ke sana. Pada versi .NET Framework sebelumnya, fitur tersebut belum ada.
- Fokus Keyboard pada tombol radio sekarang terlihat. Di versi .NET Framework sebelumnya, itu tidak.
- Kolom kotak centang kontrol DataGrid sekarang menggunakan warna sesuai harapan untuk umpan balik fokus keyboard. Pada versi .NET Framework sebelumnya, fitur tersebut belum ada.
- visual fokus Keyboard sekarang terlihat pada kontrol ComboBox dan ListBox. Di versi .NET Framework sebelumnya, itu tidak.
peningkatan interaksi pembaca layar
- Expander kontrol sekarang dinyatakan dengan benar sebagai kelompok (perluas/ciutkan) oleh pembaca layar.
- Kontrol DataGridCell kini dibacakan dengan benar sebagai sel kisi data yang dilokalkan oleh pembaca layar.
- Pembaca layar sekarang akan mengumumkan nama ComboBoxyang dapat diedit.
- PasswordBox kontrol tidak lagi diumumkan sebagai "tidak ada item dalam tampilan" oleh pembaca layar.
Dukungan LiveRegion
Pembaca layar, seperti Narator, membantu orang memahami antarmuka pengguna (UI) aplikasi, biasanya dengan menjelaskan elemen UI yang saat ini memiliki fokus. Namun, jika elemen UI berubah di suatu tempat di layar dan tidak memiliki fokus, pengguna mungkin tidak diberi tahu dan melewatkan informasi penting. LiveRegions dimaksudkan untuk menyelesaikan masalah ini. Pengembang dapat menggunakannya untuk memberi tahu pembaca layar atau klien Automation UI
Saran
Cara ikut serta atau keluar dari perubahan ini
Agar aplikasi mendapatkan manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.7.1 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
Target .NET Framework 4.7.1. Ini adalah pendekatan yang direkomendasikan. Perubahan aksesibilitas ini diaktifkan secara default pada aplikasi WPF yang menargetkan .NET Framework 4.7.1 atau yang lebih baru.
Ini tidak lagi menggunakan perilaku aksesibilitas warisan dengan menambahkan
AppContext Switch berikut di bagian file konfigurasi aplikasi dan mengaturnya ke , seperti pada contoh berikut. <?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.UseLegacyAccessibilityFeatures=false" /> </runtime> </configuration>
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dan ingin mempertahankan perilaku aksesibilitas warisan dapat memilih untuk menggunakan fitur aksesibilitas warisan dengan secara eksplisit mengatur sakelar AppContext ini ke true.
Untuk gambaran umum otomatisasi UI, lihat Gambaran Umum Automasi UI .
| Nama | Nilai |
|---|---|
| Ruang lingkup | Utama |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
Pemilih PilihanTukar peristiwa dan properti NilaiPilih
Rincian
Dimulai dengan .NET Framework 4.7.1, Selector selalu memperbarui nilai properti SelectedValue sebelum menaikkan peristiwa SelectionChanged, ketika pilihannya berubah. Ini membuat properti SelectedValue konsisten dengan properti seleksi lainnya (SelectedItem dan SelectedIndex), yang diperbarui sebelum menghasilkan peristiwa.
Dalam .NET Framework 4.7 dan versi yang lebih lama, pembaruan ke SelectedValue terjadi sebelum peristiwa dalam kebanyakan kasus, tetapi itu terjadi setelah peristiwa jika perubahan pilihan disebabkan oleh perubahan properti SelectedValue.
Saran
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dapat menolak perubahan ini dan menggunakan perilaku warisan dengan menambahkan yang berikut ini ke bagian <runtime> dari file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Aplikasi yang menargetkan .NET Framework 4.7 atau yang lebih lama tetapi berjalan pada .NET Framework 4.7.1 atau yang lebih baru dapat mengaktifkan perilaku baru dengan menambahkan baris berikut ke bagian <runtime> file .configuration aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Peristiwa TabControl SelectionChanged dan properti SelectedContent
Rincian
Dimulai dengan .NET Framework 4.7.1, TabControl memperbarui nilai properti SelectedContent sebelum menaikkan peristiwa SelectionChanged, ketika pilihannya berubah. Di .NET Framework 4.7 dan versi yang lebih lama, pembaruan ke SelectedContent terjadi setelah peristiwa.
Saran
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dapat menolak perubahan ini dan menggunakan perilaku warisan dengan menambahkan yang berikut ini ke bagian <runtime> dari file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Aplikasi yang menargetkan .NET Framework 4.7 atau yang lebih lama tetapi berjalan pada .NET Framework 4.7.1 atau yang lebih baru dapat mengaktifkan perilaku baru dengan menambahkan baris berikut ke bagian <runtime> file .configuration aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Algoritma hash default untuk WPF PackageDigitalSignatureManager sekarang adalah SHA256
Rincian
System.IO.Packaging.PackageDigitalSignatureManager menyediakan fungsionalitas untuk tanda tangan digital sehubungan dengan paket WPF. Dalam .NET Framework 4.7 dan versi yang lebih lama, algoritma default (PackageDigitalSignatureManager.DefaultHashAlgorithm) yang digunakan untuk menandatangani bagian paket adalah SHA1. Karena masalah keamanan terbaru dengan SHA1, default ini telah diubah ke SHA256 dimulai dengan .NET Framework 4.7.1. Perubahan ini memengaruhi semua penandatanganan paket, termasuk dokumen XPS.
Saran
Pengembang yang ingin menggunakan perubahan ini saat menargetkan versi kerangka kerja di bawah .NET Framework 4.7.1 atau pengembang yang memerlukan fungsionalitas sebelumnya saat menargetkan .NET Framework 4.7.1 atau yang lebih tinggi dapat mengatur bendera AppContext berikut dengan tepat. Nilai true akan mengakibatkan SHA1 digunakan sebagai algoritma default; nilai false akan mengakibatkan SHA256.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Windows Workflow Foundation (WF)
Penyempurnaan aksesibilitas di perancang alur kerja Windows Workflow Foundation (WF)
Rincian
Perancang alur kerja Windows Workflow Foundation (WF) meningkatkan cara kerjanya dengan teknologi aksesibilitas. Peningkatan ini mencakup perubahan berikut:
- Urutan tab diubah ke kiri ke kanan dan atas ke bawah dalam beberapa kontrol:
- Jendela korelasi inisialisasi untuk mengatur data korelasi untuk aktivitas InitializeCorrelation
- Jendela definisi konten untuk aktivitas Receive, Send, SendReply, dan ReceiveReply
- Lebih banyak fungsi tersedia melalui keyboard:
- Saat mengedit properti suatu aktivitas, grup properti dapat diciutkan menggunakan keyboard ketika pertama kali difokuskan.
- Ikon peringatan sekarang dapat diakses oleh keyboard.
- Tombol Properti Lainnya di jendela Properti sekarang dapat diakses oleh keyboard.
- Pengguna keyboard sekarang dapat mengakses item header di panel Argumen dan Variabel dari Perancang Alur Kerja.
- Peningkatan visibilitas item yang difokuskan, seperti saat:
- Menambahkan baris ke kisi data yang digunakan oleh Perancang Alur Kerja dan perancang aktivitas.
- Menelusuri bidang dengan tombol tab dalam aktivitas ReceiveReply dan SendReply.
- Mengatur nilai default untuk variabel atau argumen
- Pembaca layar sekarang dapat mengenali dengan benar:
- Titik henti ditetapkan dalam perancang alur kerja.
- Aktivitas FlowSwitch<T>, FlowDecision, dan CorrelationScope.
- Konten aktivitas Receive.
- Tipe Target untuk aktivitas InvokeMethod.
- Kotak kombo Pengecualian dan bagian Akhir di aktivitas TryCatch.
- Kotak kombo Jenis Pesan, pemisah di jendela Tambahkan Penginisialisasi Korelasi, jendela Definisi Konten, dan jendela CorrelatesOn Defintion dalam aktivitas olahpesan (Receive, Send, SendReply, dan ReceiveReply).
- Transisi mesin status dan tujuan transisi.
- Anotasi dan konektor pada aktivitas FlowDecision.
- Menu konteks (klik kanan) untuk aktivitas.
- Editor nilai properti, tombol Hapus Pencarian, tombol Menurut Kategori dan Pengurutan alfabet, dan dialog Editor Ekspresi di kisi properti.
- Persentase zoom di Perancang Alur Kerja.
- Pemisah dalam aktivitas Parallel dan Pick.
- Aktivitas InvokeDelegate.
- Jendela Pilih Jenis untuk aktivitas kamus (
Microsoft.Activities.AddToDictionary<TKey,TValue>,Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, dll.). - Jendela Telusuri dan Pilih Jenis .NET.
- Remah roti di Perancang Alur Kerja.
- Pengguna yang memilih tema Kontras Tinggi akan melihat banyak peningkatan dalam visibilitas Perancang Alur Kerja dan kontrolnya seperti rasio kontras yang lebih baik antara elemen dan kotak pilihan yang lebih terlihat yang digunakan untuk elemen fokus.
Saran
Jika Anda memiliki aplikasi dengan perancang alur kerja yang dihost ulang, aplikasi Anda dapat memperoleh manfaat dari perubahan ini dengan melakukan salah satu tindakan ini:
- Kompilasi ulang aplikasi Anda untuk menargetkan .NET Framework 4.7.1. Perubahan aksesibilitas ini diaktifkan secara default.
- Jika aplikasi Anda menargetkan .NET Framework 4.7 atau yang lebih lama tetapi berjalan pada .NET Framework 4.7.1, Anda dapat memilih keluar dari perilaku aksesibilitas warisan ini dengan menambahkan sakelar AppContext berikut ke bagian
<runtime>dari file app.config dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<?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.UseLegacyAccessibilityFeatures=false" />
</runtime>
</configuration>
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dan ingin mempertahankan perilaku aksesibilitas warisan dapat memilih untuk menggunakan fitur aksesibilitas warisan dengan secara eksplisit mengatur sakelar AppContext ini ke true.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.1 |
| Jenis | Penargetan ulang |
.NET Framework 4.7.2
Inti
Perbolehkan Karakter Kontrol Dua Arah Unicode dalam URI
Rincian
Unicode menentukan beberapa karakter kontrol khusus yang digunakan untuk menentukan orientasi teks. Dalam versi .NET Framework sebelumnya, karakter ini dihapus dari semua URI meskipun ada dalam bentuk persentase terkode. Untuk lebih mengikuti RFC 3987, kita sekarang mengizinkan karakter ini dalam URI. Ketika ditemukan tidak dikodekan dalam URI, mereka dikodekan persen. Ketika mereka ditemukan di-encode menggunakan persen, mereka dibiarkan as-is.
Saran
Untuk aplikasi yang menargetkan versi .NET Framework yang dimulai dengan 4.7.2, dukungan untuk karakter dua arah Unicode diaktifkan secara default. Jika perubahan ini tidak diinginkan, Anda dapat menonaktifkannya dengan menambahkan switch AppContextSwitchOverrides ke bagian <runtime> dari file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework sebelumnya tetapi berjalan di bawah versi yang dimulai dengan .NET Framework 4.7.2, dukungan untuk karakter dua arah Unicode dinonaktifkan secara default. Anda dapat mengaktifkannya dengan menambahkan switch AppContextSwitchOverrides ke bagian <runtime> dari file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
DeflateStream menggunakan API asli untuk dekompresi
Rincian
Dimulai dengan .NET Framework 4.7.2, implementasi dekompresi di kelas DeflateStream telah berubah untuk menggunakan API Windows asli secara default. Biasanya, ini menghasilkan peningkatan performa yang substansial. Semua aplikasi .NET yang menargetkan .NET Framework versi 4.7.2 atau yang lebih tinggi menggunakan implementasi asli. Perubahan ini dapat mengakibatkan beberapa perbedaan perilaku, yang meliputi:
- Pesan pengecualian mungkin berbeda. Namun, jenis pengecualian yang dilemparkan tetap sama.
- Beberapa situasi khusus, seperti tidak memiliki cukup memori untuk menyelesaikan operasi, mungkin ditangani secara berbeda.
- Ada perbedaan yang diketahui saat mengurai header gzip (hanya ketika
GZipStreamdigunakan untuk dekompresi). - Pengecualian saat mengurai header yang tidak valid mungkin dikeluarkan pada waktu yang berbeda.
- Implementasi asli memberlakukan bahwa nilai untuk beberapa bendera tertentu yang dipesan di dalam header gzip diatur menurut spesifikasinya, yang dapat menyebabkan munculnya pengecualian di mana nilai yang sebelumnya memiliki nilai tidak valid diabaikan.
Saran
Jika dekompresi dengan API asli berdampak buruk pada perilaku aplikasi, Anda dapat menolak fitur ini dengan menambahkan pengalihan Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression ke bagian runtime file app.config Anda dan mengaturnya ke true:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Memastikan System.Uri menggunakan set karakter yang telah ditetapkan secara konsisten
Rincian
Pada System.Uri, karakter-karakter tertentu yang dikodekan dalam format persen dan terkadang didekodekan, sekarang tetap secara konsisten dalam format kode. Ini terjadi di seluruh properti dan metode yang mengakses jalur, kueri, fragmen, atau komponen userinfo dari URI. Perilaku hanya akan berubah ketika kedua hal berikut ini benar:
- URI berisi bentuk yang dikodekan dari salah satu karakter cadangan berikut:
:,',(,),!atau*. - URI berisi sebuah karakter Unicode atau karakter tidak dicadangkan yang dienkode. Jika kedua hal di atas benar, karakter cadangan yang telah dikodekan tetap dibiarkan dalam keadaan terkode. Dalam versi .NET Framework sebelumnya, mereka didekodekan.
Saran
Untuk aplikasi yang menargetkan versi .NET Framework yang dimulai dengan 4.7.2, perilaku decoding baru diaktifkan secara default. Jika perubahan ini tidak diinginkan, Anda dapat menonaktifkannya dengan menambahkan switch AppContextSwitchOverrides ke bagian <runtime> dari file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework sebelumnya tetapi berjalan di bawah versi yang dimulai dengan .NET Framework 4.7.2, perilaku decoding baru dinonaktifkan secara default. Anda dapat mengaktifkannya dengan menambahkan switch AppContextSwitchOverrides ke bagian <runtime> dari file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Resgen menolak memuat konten dari web
Rincian
File .resx mungkin berisi input berformat biner. Jika Anda mencoba menggunakan resgen untuk memuat file yang diunduh dari lokasi yang tidak tepercaya, itu akan gagal memuat input secara default.
Saran
Pengguna Resgen yang membutuhkan pemuatan input berformat biner dari lokasi yang tidak tepercaya dapat menghapus tanda web dari file input atau menerapkan pengaturan keluar. Tambahkan pengaturan registri berikut untuk menerapkan pengaturan keluar pada seluruh mesin: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
Jejak tumpukan yang diperoleh saat menggunakan PDB portabel sekarang menyertakan file sumber dan informasi baris jika diminta
Rincian
Dimulai dengan .NET Framework 4.7.2, jejak tumpukan yang diperoleh saat menggunakan PDB portabel mencakup file sumber dan informasi baris saat diminta. Dalam versi sebelum .NET Framework 4.7.2, file sumber dan informasi baris tidak akan tersedia saat menggunakan PDB portabel bahkan jika diminta secara eksplisit.
Saran
Untuk aplikasi yang menargetkan .NET Framework 4.7.2, Anda dapat memilih keluar dari file sumber dan informasi baris saat menggunakan PDB portabel jika tidak diinginkan dengan menambahkan yang berikut ini ke bagian <runtime> file app.config Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework sebelumnya tetapi berjalan pada .NET Framework 4.7.2 atau yang lebih baru, Anda dapat ikut serta ke file sumber dan informasi baris saat menggunakan PDB portabel dengan menambahkan yang berikut ini ke bagian <runtime> file app.config Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Formulir Windows
Peningkatan aksesibilitas di kontrol Formulir Windows untuk .NET 4.7.2
Rincian
Formulir Windows Framework meningkatkan cara kerjanya dengan teknologi aksesibilitas untuk mendukung pelanggan Formulir Windows dengan lebih baik. Ini termasuk perubahan berikut:
- Perubahan untuk meningkatkan tampilan selama mode Kontras Tinggi.
- Perubahan untuk meningkatkan navigasi keyboard di kontrol DataGridView dan MenuStrip.
- Perubahan interaksi dengan Narator.
Saran
Cara ikut serta atau keluar dari perubahan ini Agar aplikasi mendapatkan manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Ini dikompresi ulang untuk menargetkan .NET Framework 4.7.2. Perubahan aksesibilitas ini diaktifkan secara default pada aplikasi Formulir Windows yang menargetkan .NET Framework 4.7.2 atau yang lebih baru.
- Ini menargetkan .NET Framework 4.7.1 atau versi yang lebih lama dan menolak perilaku aksesibilitas lama dengan menambahkan AppContext Switch berikut ke bagian
<runtime>file konfigurasi aplikasi dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<?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.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
</runtime>
</configuration>
Perhatikan bahwa untuk ikut serta dalam fitur aksesibilitas yang ditambahkan dalam .NET Framework 4.7.2, Anda juga harus ikut serta dalam fitur aksesibilitas .NET Framework 4.7.1 juga. Aplikasi yang menargetkan .NET Framework 4.7.2 atau yang lebih baru dan ingin mempertahankan perilaku aksesibilitas warisan dapat memilih untuk menggunakan fitur aksesibilitas warisan dengan secara eksplisit mengatur sakelar AppContext ini ke true.
Penggunaan warna yang ditentukan OS dalam tema Kontras Tinggi
- Panah dropdown ToolStripDropDownButton sekarang menggunakan warna yang ditentukan oleh OS dalam tema Kontras Tinggi.
- Button, RadioButton, dan CheckBox kontrol dengan FlatStyle diatur ke FlatStyle.Flat atau FlatStyle.Popup sekarang menggunakan warna yang ditentukan oleh OS dalam tema Kontras Tinggi ketika dipilih. Sebelumnya, warna teks dan latar belakang tidak kontras dan sulit dibaca.
- Kontrol yang berada dalam GroupBox dengan properti Enabled yang diatur ke
falsesekarang akan menggunakan warna yang ditentukan oleh sistem operasi dalam tema Kontras Tinggi. - Kontrol ToolStripButton, ToolStripComboBox, dan ToolStripDropDownButton memiliki peningkatan rasio kontrasitas luminositas dalam Mode Kontras Tinggi.
- DataGridViewLinkCell secara default akan menggunakan warna yang ditentukan OS dalam mode Kontras Tinggi untuk properti DataGridViewLinkCell.LinkColor. CATATAN: Windows 10 telah mengubah nilai untuk beberapa warna sistem kontras tinggi. Formulir Windows Framework didasarkan pada kerangka kerja Win32. Untuk pengalaman terbaik, jalankan pada versi terbaru Windows dan ikut serta dalam perubahan OS terbaru dengan menambahkan file app.manifest dalam aplikasi pengujian dan membatalkan komentar kode berikut:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Dukungan Narator yang Ditingkatkan
- Narator sekarang mengumumkan nilai properti ToolStripMenuItem.ShortcutKeys saat mengumumkan teks ToolStripMenuItem.
- Narator sekarang menunjukkan kapan ToolStripMenuItem memiliki properti Enabled diatur ke
false. - Narator sekarang memberikan umpan balik tentang status kotak centang ketika properti ListView.CheckBoxes diatur ke
true. - Urutan fokus Mode Pemindaian Narator sekarang konsisten dengan urutan visual kontrol pada jendela dialog unduhan ClickOnce.
Dukungan Aksesibilitas DataGridView yang Ditingkatkan
- Baris dalam DataGridView sekarang dapat diurutkan menggunakan keyboard. Sekarang pengguna dapat menggunakan kunci F3 untuk mengurutkan menurut kolom saat ini.
- Saat DataGridView.SelectionMode diatur ke DataGridViewSelectionMode.FullRowSelect, header kolom akan berubah warna untuk menunjukkan kolom saat ini ketika pengguna berpindah melalui sel pada baris saat ini.
- Properti DataGridViewCell.DataGridViewCellAccessibleObject.Parent sekarang sudah mengembalikan kontrol induk yang benar.
Petunjuk visual yang disempurnakan
- Kontrol RadioButton dan CheckBox dengan properti Text kosong sekarang akan menampilkan indikator fokus saat menerima fokus.
Dukungan Kisi Properti yang Ditingkatkan
Elemen turunan kontrol PropertyGrid sekarang mengembalikan
trueuntuk properti IsReadOnlyProperty hanya ketika elemen PropertyGrid diaktifkan.Elemen turunan kontrol PropertyGrid sekarang mengembalikan
navigasi keyboard yang disempurnakanfalseuntuk properti IsEnabledProperty hanya ketika elemen PropertyGrid dapat diubah oleh pengguna. Untuk gambaran umum otomatisasi UI, lihat Gambaran Umum Automasi UI .ToolStripButton sekarang memungkinkan fokus ketika terkandung dalam ToolStripPanel yang memiliki properti TabStop diatur ke
true.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Utama |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
Properti ContextMenuStrip.SourceControl berisi kontrol yang valid dalam kasus ToolStripMenuItems berlapis
Rincian
Di .NET Framework 4.7.1 dan versi sebelumnya, properti ContextMenuStrip.SourceControl salah mengembalikan null saat pengguna membuka menu dari kontrol ToolStripMenuItem berlapis. Di .NET Framework 4.7.2 dan yang lebih baru, properti SourceControl selalu diatur ke kontrol sumber aktual.
Saran
Cara ikut serta atau keluar dari perubahan ini Agar aplikasi mendapatkan manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Ini menargetkan .NET Framework 4.7.2. Perubahan ini diaktifkan secara default pada aplikasi Formulir Windows yang menargetkan .NET Framework 4.7.2 atau yang lebih baru.
- Ini menargetkan .NET Framework 4.7.1 atau versi yang lebih lama dan menonaktifkan perilaku aksesibilitas lama dengan menambahkan AppContext Switch berikut ke bagian
<runtime>dari file app.config dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>
Aplikasi yang menargetkan .NET Framework 4.7.2 atau yang lebih baru, dan ingin mempertahankan perilaku warisan dapat ikut serta dalam penggunaan nilai kontrol sumber warisan dengan secara eksplisit mengatur sakelar AppContext ini ke true.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Metode PrivateFontCollection.AddFontFile merilis sumber daya Font
Rincian
Dalam .NET Framework 4.7.1 dan versi sebelumnya, kelas System.Drawing.Text.PrivateFontCollection tidak merilis sumber daya font GDI+ setelah PrivateFontCollection dibuang untuk objek Font yang ditambahkan ke koleksi ini menggunakan metode AddFontFile(String). Dalam .NET Framework 4.7.2 dan yang lebih baru Dispose merilis font GDI+ yang ditambahkan ke koleksi sebagai file.
Saran
Cara ikut serta atau keluar dari perubahan ini Agar aplikasi mendapatkan manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Ini dikompresi ulang untuk menargetkan .NET Framework 4.7.2. Perubahan ini diaktifkan secara default pada aplikasi Formulir Windows yang menargetkan .NET Framework 4.7.2 atau yang lebih baru.
- Ini menargetkan .NET Framework 4.7.1 atau versi yang lebih lama dan menonaktifkan perilaku aksesibilitas lama dengan menambahkan AppContext Switch berikut ke bagian
<runtime>dari file app.config dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>
Aplikasi yang menargetkan .NET Framework 4.7.2 atau yang lebih baru, dan ingin mempertahankan perilaku warisan dapat memilih untuk tidak merilis sumber daya font dengan secara eksplisit mengatur sakelar AppContext ini ke true.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Tindakan tombol naik dan tombol turun Domain WinForm sekarang sudah sinkron.
Rincian
Dalam .NET Framework 4.7.1 dan versi sebelumnya, tindakan DomainUpDown kontrol DomainUpDown.UpButton() diabaikan saat teks kontrol ada, dan pengembang diharuskan menggunakan tindakan DomainUpDown.DownButton() pada kontrol sebelum menggunakan tindakan DomainUpDown.UpButton(). Dimulai dengan .NET Framework 4.7.2 tindakan DomainUpDown.UpButton() dan DomainUpDown.DownButton() bekerja secara independen dalam skenario ini dan tetap sinkron.
Saran
Agar aplikasi mendapatkan manfaat dari perubahan ini, aplikasi harus berjalan pada .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Ini dikompresi ulang untuk menargetkan .NET Framework 4.7.2. Perubahan ini diaktifkan secara default pada aplikasi Formulir Windows yang menargetkan .NET Framework 4.7.2 atau yang lebih baru.
- Ini memilih keluar dari perilaku gulir warisan dengan menambahkan AppContext Switch berikut ke bagian
<runtime>file konfigurasi aplikasi dan mengaturnya kefalse, seperti yang ditunjukkan contoh berikut.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
API yang terpengaruh
Windows Presentation Foundation (WPF)
Fokus keyboard sekarang dapat berpindah dengan tepat di berbagai lapisan hosting WinForms/WPF
Rincian
Pertimbangkan aplikasi WPF yang menghosting kontrol WinForms yang pada gilirannya menghosting kontrol WPF. Pengguna mungkin tidak dapat melakukan tab keluar dari lapisan WinForms jika kontrol pertama atau terakhir di lapisan tersebut adalah WPF System.Windows.Forms.Integration.ElementHost. Perubahan ini memperbaiki masalah ini, dan pengguna sekarang dapat menekan tombol tab untuk keluar dari lapisan WinForms. Aplikasi otomatis yang mengandalkan fokus yang tidak pernah keluar dari lapisan WinForms mungkin tidak lagi berfungsi sebagaimana mestinya.
Saran
Pengembang yang ingin menggunakan perubahan ini saat menargetkan versi kerangka kerja di bawah .NET 4.7.2 dapat mengatur set bendera AppContext berikut ke false agar perubahan diaktifkan.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>
Aplikasi WPF harus ikut serta dalam semua peningkatan aksesibilitas awal untuk mendapatkan peningkatan selanjutnya. Dengan kata lain, sakelar Switch.UseLegacyAccessibilityFeatures dan Switch.UseLegacyAccessibilityFeatures.2 harus diatur. Seorang pengembang yang memerlukan fungsionalitas sebelumnya saat menargetkan .NET 4.7.2 atau yang lebih baru dapat mengatur bendera AppContext berikut ke "true" agar perubahan dinonaktifkan.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
Algoritma hash default untuk Compiler Markup WPF sekarang adalah SHA256
Rincian
WPF MarkupCompiler menyediakan layanan kompilasi untuk file markup XAML. Dalam .NET Framework 4.7.1 dan versi yang lebih lama, algoritma hash default yang digunakan untuk checksum adalah SHA1. Karena masalah keamanan terbaru dengan SHA1, default ini telah diubah ke SHA256 dimulai dengan .NET Framework 4.7.2. Perubahan ini memengaruhi semua pembuatan checksum untuk file markup selama kompilasi.
Saran
Pengembang yang menargetkan .NET Framework 4.7.2 atau yang lebih besar dan ingin kembali ke perilaku hashing SHA1 harus mengatur bendera AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>
Pengembang yang ingin menggunakan hash SHA256 sambil menargetkan versi kerangka kerja di bawah .NET 4.7.2 harus mengatur bendera AppContext di bawah ini. Perhatikan bahwa versi .NET Framework yang diinstal harus 4.7.2 atau lebih tinggi.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Transparan |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
Penanganan Penghentian AppDomain WPF Sekarang Dapat Mengaktifkan Dispatcher.Invoke dalam Membersihkan Acara Lemah
Rincian
Dalam .NET Framework 4.7.1 dan versi yang lebih lama, WPF berpotensi membuat System.Windows.Threading.Dispatcher pada utas finalizer .NET selama penonaktifan AppDomain. Ini telah diperbaiki dalam .NET Framework 4.7.2 dan versi yang lebih baru dengan menjadikan pembersihan dari event lemah dapat mengenali thread. Karena itu, WPF dapat memanggil Dispatcher.Invoke untuk menyelesaikan proses pembersihan. Dalam aplikasi tertentu, perubahan waktu finalizer ini berpotensi menyebabkan pengecualian selama AppDomain atau penonaktifan proses. Ini umumnya terlihat dalam aplikasi yang tidak mematikan dispatcher dengan benar yang berjalan pada utas pekerja sebelum proses atau penonaktifan AppDomain. Aplikasi tersebut harus berhati-hati untuk mengelola masa pakai dispatcher dengan benar.
Saran
Dalam .NET Framework 4.7.2 dan versi yang lebih baru, pengembang dapat menonaktifkan perbaikan ini untuk membantu meringankan (tetapi tidak menghilangkan) masalah waktu yang mungkin terjadi karena perubahan pembersihan. Untuk menonaktifkan perubahan pembersihan, gunakan bendera AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
WPF Mengubah kunci utama saat menampilkan data ADO dalam skenario Master/Detail
Rincian
Misalkan Anda memiliki kumpulan item jenis ADO Order, dengan hubungan bernama "OrderDetails" yang berkaitan dengan kumpulan item jenis Detail melalui kunci utama "OrderID". Di aplikasi WPF, Anda dapat mengikat kontrol daftar ke detail untuk pesanan tertentu:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
di mana DataContext adalah Order. WPF mendapatkan nilai properti OrderDetails - koleksi D dari semua item Detail yang OrderID nya cocok dengan OrderID item master. Perubahan perilaku muncul ketika Anda mengubah kunci utama OrderID pada item master. ADO secara otomatis mengubah OrderID dari setiap rekaman yang terpengaruh dalam koleksi Detail (yaitu yang disalin ke dalam koleksi D). Tapi apa yang terjadi pada D?
- Perilaku lama: Koleksi D dikosongkan. Item utama tidak mengirimkan pemberitahuan perubahan untuk properti
OrderDetails. ListBox terus menggunakan koleksi D, yang sekarang kosong. - Perilaku baru: Koleksi D tidak berubah. Setiap itemnya memunculkan pemberitahuan perubahan untuk properti
OrderID. ListBox terus menggunakan koleksi D dan menampilkan detail dengan menggunakanOrderIDyang baru. WPF menerapkan perilaku baru dengan membuat koleksi D dengan cara yang berbeda: dengan memanggil metode ADO DataRowView.CreateChildView(DataRelation, Boolean) dengan argumenfollowParentdiatur ketrue.
Saran
Aplikasi mendapatkan perilaku baru dengan menggunakan sakelar AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
</runtime>
</configuration>
Pengalihan default ke true (perilaku lama) untuk aplikasi yang menargetkan .NET 4.7.1 atau di bawahnya, dan ke false (perilaku baru) untuk aplikasi yang menargetkan .NET 4.7.2 atau lebih tinggi.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Kecil |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
WPF FocusVisual untuk RadioButton dan CheckBox Sekarang Ditampilkan Dengan Benar Ketika Kontrol Tidak Memiliki Konten
Rincian
Dalam .NET Framework 4.7.1 dan versi yang lebih lama, WPF System.Windows.Controls.CheckBox dan System.Windows.Controls.RadioButton tidak konsisten dan, dalam tema Klasik dan Kontras Tinggi, visual fokus yang tidak tepat. Masalah ini terjadi jika kontrol tidak memiliki kumpulan konten apa pun. Ini dapat membuat transisi antara tema membingungkan dan fokus visual sulit dilihat. Dalam .NET Framework 4.7.2, visual ini sekarang lebih konsisten di seluruh tema dan lebih mudah terlihat dalam tema Klasik dan Kontras Tinggi.
Saran
Pengembang yang menargetkan .NET Framework 4.7.2 yang ingin kembali ke perilaku di .NET 4.7.1 harus mengatur bendera AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>
Pengembang yang ingin menggunakan perubahan ini saat menargetkan versi kerangka kerja di bawah .NET 4.7.2 harus mengatur bendera AppContext berikut. Perhatikan bahwa semua bendera harus diatur dengan tepat dan versi .NET Framework yang diinstal harus 4.7.2 atau lebih tinggi. Aplikasi WPF diperlukan untuk ikut serta dalam semua peningkatan aksesibilitas sebelumnya untuk mendapatkan peningkatan terbaru. Untuk melakukan ini, pastikan bahwa sakelar AppContext 'Switch.UseLegacyAccessibilityFeatures' dan 'Switch.UseLegacyAccessibilityFeatures.2' diatur ke false.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
Pemilihan Teks pada TextBox/PasswordBox WPF Tidak Mengikuti Warna Sistem
Rincian
Dalam .NET Framework 4.7.1 dan versi yang lebih lama, WPF System.Windows.Controls.TextBox dan System.Windows.Controls.PasswordBox hanya dapat merender pilihan teks di lapisan Adorner. Dalam beberapa tema sistem, ini dapat mengaburkan teks, sehingga sulit untuk dibaca. Di .NET Framework 4.7.2 dan yang lebih baru, pengembang memiliki opsi untuk mengaktifkan skema penyajian pilihan berbasis non-Adorner yang meringankan masalah ini.
Saran
Pengembang yang ingin menggunakan perubahan ini harus mengatur bendera AppContext berikut dengan tepat. Untuk menggunakan fitur ini, versi .NET Framework yang diinstal harus 4.7.2 atau lebih tinggi. Untuk mengaktifkan pilihan yang tidak berbasis adorner, gunakan pengaturan AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |
Windows Workflow Foundation (WF)
Menghindari rekursi tanpa akhir untuk IWorkflowInstanceManagement.TransactedCancel dan IWorkflowInstanceManagement.TransactedTerminate
Rincian
Dalam beberapa keadaan saat menggunakan API IWorkflowInstanceManagement.TransactedCancel atau IWorkflowInstanceManagement.TransactedTerminate untuk membatalkan atau mengakhiri instans layanan alur kerja, instans alur kerja mungkin mengalami luapan tumpukan karena rekursi tanpa akhir ketika runtime Workflow mencoba mempertahankan instans layanan sebagai bagian dari pemrosesan permintaan. Masalah terjadi jika instans alur kerja dalam keadaan menunggu beberapa permintaan WCF lain yang belum selesai ke layanan lain untuk diselesaikan. Operasi TransactedCancel dan TransactedTerminate membuat item kerja yang diantrekan untuk instans layanan alur kerja. Item kerja ini tidak dijalankan sebagai bagian dari pemrosesan permintaan TransactedCancel/TransactedTerminate. Karena instans layanan alur kerja sibuk menunggu permintaan WCF lain yang tertunda selesai, item kerja yang telah dibuat tetap diantrekan. Operasi TransactedCancel/TransactedTerminate selesai dan kontrol dikembalikan ke klien. Ketika transaksi yang terkait dengan operasi TransactedCancel/TransactedTerminate mencoba melakukan commit, perlu untuk mempertahankan status instance layanan alur kerja. Tetapi karena ada permintaan WCF yang sedang menunggu untuk instans, runtime Alur Kerja tidak dapat mempertahankan instans layanan alur kerja, dan perulangan rekursi tanpa akhir menyebabkan kelebihan beban tumpukan. Karena TransactedCancel dan TransactedTerminate hanya membuat item kerja dalam memori, fakta bahwa transaksi ada tidak berdampak. Pengembalian transaksi tidak membuang item kerja. Untuk menyelesaikan masalah ini, mulai dari .NET Framework 4.7.2, kami telah memperkenalkan AppSetting yang dapat ditambahkan ke web.config/app.config layanan alur kerja yang memberitahu untuk mengabaikan transaksi pada TransactedCancel dan TransactedTerminate. Ini memungkinkan transaksi diterapkan tanpa menunggu instans alur kerja bertahan. AppSetting untuk fitur ini diberi nama microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. Nilai true menunjukkan bahwa transaksi harus diabaikan, sehingga menghindari luapan tumpukan. Nilai default AppSetting ini false, sehingga instans layanan alur kerja yang ada tidak terpengaruh.
Saran
Jika Anda menggunakan AppFabric atau klien lainnya yang menggunakan IWorkflowInstanceManagement dan mengalami stack overflow dalam instance layanan alur kerja ketika mencoba membatalkan atau mengakhiri suatu instance alur kerja, Anda dapat menambahkan berikut ini ke bagian <appSettings> di file web.config/app.config untuk layanan alur kerja:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Jika Anda tidak mengalami masalah, Anda tidak perlu melakukan ini.
| Nama | Nilai |
|---|---|
| Ruang lingkup | Edge |
| Versi | 4.7.2 |
| Jenis | Penargetan ulang |