Menargetkan ulang perubahan untuk migrasi ke .NET Framework 4.7.x
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 Menampilkan NullReferenceException
Detail
Di .NET Framework 4.6.2, runtime menampilkan T:System.NullReferenceException
saat mengambil nilai P:System.Web.HttpRuntime.AppDomainAppPath
yang menyertakan karakter null. Dalam .NET Framework 4.6.1 dan versi sebelumnya, runtime menampilkan T:System.ArgumentNullException
.
Saran
Anda dapat melakukan salah satu hal berikut ini untuk menanggapi perubahan ini:
- Lakukan penanganan
T:System.NullReferenceException
jika aplikasi Anda berjalan di .NET Framework 4.6.2. - Tingkatkan ke .NET Framework 4.7, yang memulihkan perilaku sebelumnya dan melempar
T:System.ArgumentNullException
.
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.6.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Membatasi permintaan bersamaan per sesi
Detail
Di .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, performa server akan turun secara signifikan hanya dengan menekan F5 di browser. Dalam perbaikan, kami menambahkan penghitung untuk melacak permintaan antrean dan mengakhiri permintaan jika melebihi batas yang ditentukan. Nilai defaultnya adalah 50. Jika batas tercapai, peringatan akan dicatat di log kejadian, dan respons HTTP 500 mungkin akan direkam di log IIS.
Saran
Untuk memulihkan perilaku lama, Anda dapat menambahkan pengaturan berikut ke file web.config untuk menolak perilaku baru.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7 |
Jenis | Penargetan Ulang |
Jaringan
Nilai default ServicePointManager.SecurityProtocol adalah SecurityProtocolType.System.Default
Detail
Mulai dari 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) mewarisi protokol keamanan default dari sistem operasi, bukan menggunakan nilai yang dikodekan secara permanen yang ditentukan oleh .NET Framework. Pengaturan default bervariasi menurut sistem operasi dan konfigurasi kustom apa pun yang dilakukan oleh administrator sistem. Untuk mengetahui informasi tentang protokol SChannel default di setiap versi sistem operasi Windows, lihat Protokol di TLS/SSL (Schannel SSP).
Untuk aplikasi yang menargetkan .NET Framework versi sebelumnya, nilai default properti ServicePointManager.SecurityProtocol bergantung pada versi .NET Framework yang ditargetkan. Lihat Bagian Jaringan dari Menargetkan Ulang Perubahan untuk Migrasi dari .NET Framework 4.5.2 ke 4.6 untuk informasi selengkapnya.Saran
Perubahan ini memengaruhi aplikasi yang menargetkan versi .NET Framework 4.7 atau versi yang lebih baru. Jika Anda lebih suka menggunakan protokol yang ditentukan daripada mengandalkan default sistem, Anda dapat mengatur nilai properti ServicePointManager.SecurityProtocol secara eksplisit. Jika perubahan ini tidak diinginkan, Anda dapat menolaknya dengan menambahkan setelan konfigurasi ke bagian <runtime> file konfigurasi aplikasi Anda. Contoh berikut menunjukkan bagian <runtime>
dan tombol untuk menolak Switch.System.Net.DontEnableSystemDefaultTlsVersions
:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
SslStream mendukung Peringatan TLS
Detail
Setelah handshake TLS yang gagal, System.IO.IOException dengan pengecualian System.ComponentModel.Win32Exception dalam akan ditampilkan oleh operasi Baca/Tulis I/O pertama. Kode System.ComponentModel.Win32Exception.NativeErrorCode untuk System.ComponentModel.Win32Exception dapat dipetakan ke Peringatan TLS dari pihak jarak jauh yang menggunakan Kode galat Schannel untuk peringatan TLS dan SSL. Untuk mengetahui informasi selengkapnya, lihat RFC 2246: Bagian 7.2.2 Peringatan kesalahan.
Perilaku di .NET Framework 4.6.2 dan versi sebelumnya adalah batas waktu saluran transportasi (biasanya koneksi TCP) akan habis selama operasi Tulis atau Baca jika pihak lain gagal melakukan handshake dan langsung menolak koneksi setelah itu.
Saran
Aplikasi yang memanggil API I/O jaringan seperti Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) akan menangani IOException atau System.TimeoutException.
Fitur Peringatan 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 versi yang lebih baru yang berjalan di .NET Framework 4.7 atau versi yang lebih baru.
Secara terprogram: Harus menjadi hal pertama yang dilakukan aplikasi karena ServicePointManager hanya akan diinisialisasi 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 mesin): Atur Nilai ke
false
untuk 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 |
---|---|
Cakupan | Azure Stack 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
Detail
Nilai ParentWindowHandle, yang diperkenalkan di .NET Framework 2.0, memungkinkan aplikasi mendaftarkan nilai handel jendela induk sedemikian rupa sehingga setiap UI yang diperlukan untuk mengakses kunci (seperti permintaan PIN atau dialog persetujuan) terbuka sebagai turunan modal ke jendela yang ditentukan. Mulai dari aplikasi yang menargetkan .NET Framework 4.7, aplikasi Formulir Windows dapat mengatur properti ParentWindowHandle dengan kode seperti berikut:
cspParameters.ParentWindowHandle = form.Handle;
Di .NET Framework versi sebelumnya, nilai diharapkan berupa System.IntPtr yang mewakili lokasi dalam memori tempat nilai HWND berada. Mengatur properti ke form.Handle di Windows 7 dan versi sebelumnya tidak berpengaruh, tetapi di Windows 8 dan versi yang lebih baru, setelan ini akan menghasilkan "System.Security.Cryptography.CryptographicException: Parameternya salah."
Saran
Aplikasi yang menargetkan .NET Framework 4.7 atau lebih tinggi yang ingin mendaftarkan hubungan jendela induk dianjurkan untuk menggunakan formulir yang disederhanakan:
cspParameters.ParentWindowHandle = form.Handle;
Pengguna yang telah mengidentifikasi bahwa nilai yang benar yang akan diteruskan adalah alamat lokasi memori yang mempunyai nilai form.Handle
dapat menolak perubahan perilaku dengan mengatur tombol AppContext Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle
ke true
:
- Dengan mengatur tombol kompatibilitas secara terprogram di AppContext, seperti yang dijelaskan di sini.
- Dengan menambahkan baris berikut ke bagian
<runtime>
dari file app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>
Sebaliknya, pengguna yang ingin ikut serta dalam perilaku baru pada runtime bahasa umum .NET Framework 4.7 saat aplikasi dimuat di versi .NET Framework yang lebih lama dapat mengatur tombol AppContext ke false
.
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
SslStream mendukung Peringatan TLS
Detail
Setelah handshake TLS yang gagal, System.IO.IOException dengan pengecualian System.ComponentModel.Win32Exception dalam akan ditampilkan oleh operasi Baca/Tulis I/O pertama. Kode System.ComponentModel.Win32Exception.NativeErrorCode untuk System.ComponentModel.Win32Exception dapat dipetakan ke Peringatan TLS dari pihak jarak jauh yang menggunakan Kode galat Schannel untuk peringatan TLS dan SSL. Untuk mengetahui informasi selengkapnya, lihat RFC 2246: Bagian 7.2.2 Peringatan kesalahan.
Perilaku di .NET Framework 4.6.2 dan versi sebelumnya adalah batas waktu saluran transportasi (biasanya koneksi TCP) akan habis selama operasi Tulis atau Baca jika pihak lain gagal melakukan handshake dan langsung menolak koneksi setelah itu.
Saran
Aplikasi yang memanggil API I/O jaringan seperti Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) akan menangani IOException atau System.TimeoutException.
Fitur Peringatan 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 versi yang lebih baru yang berjalan di .NET Framework 4.7 atau versi yang lebih baru.
Secara terprogram: Harus menjadi hal pertama yang dilakukan aplikasi karena ServicePointManager hanya akan diinisialisasi 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 mesin): Atur Nilai ke
false
untuk 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 |
---|---|
Cakupan | Azure Stack 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
Detail
Di .NET Framework 4.6.2 dan versi sebelumnya, System.Runtime.Serialization.Json.DataContractJsonSerializer tidak melakukan serialisasi beberapa karakter kontrol khusus, seperti \b, \f, dan \t dengan sedemikian rupa sehingga kompatibel dengan standar ECMAScript V6 dan V8. Mulai dari .NET Framework 4.7, serialisasi karakter kontrol ini sesuai 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 menolak 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 |
---|---|
Cakupan | Azure Stack 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
Detail
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
Di .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 |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7 |
Jenis | Penargetan Ulang |
Windows Presentation Foundation (WPF)
Panggilan ke System.Windows.Input.PenContext.Disable pada sistem yang mendukung sentuhan dapat menimbulkan ArgumentException
Detail
Dalam beberapa keadaan, panggilan ke metode System.Windows internal. Metode Intput.PenContext.Disable pada sistem yang mendukung sentuhan dapat menerapkan T:System.ArgumentException
tidak tertangani karena masuknya kembali.
Saran
Masalah ini telah diatasi di .NET Framework 4.7. Untuk mencegah pengecualian, tingkatkan ke .NET Framework mulai dari .NET Framework versi 4.7.
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.6.1 |
Jenis | Penargetan Ulang |
NullReferenceException dalam kode penanganan pengecualian dari ImageSourceConverter.ConvertFrom
Detail
Kesalahan dalam kode penanganan pengecualian untuk ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) telah menyebabkan munculnya System.NullReferenceException yang salah, bukan pengecualian yang dimaksudkan (System.IO.DirectoryNotFoundException atau System.IO.FileNotFoundException). Perubahan ini memperbaiki kesalahan tersebut sehingga metode sekarang memberikan pengecualian yang tepat.
Secara default semua aplikasi yang menargetkan .NET Framework 4.6.2 dan yang lebih lama terus melempar System.NullReferenceException untuk kompatibilitas. Pengembang yang menargetkan .NET Framework 4.7 dan versi lebih baru 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 elemen berikut ke file App.config aplikasi:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Alokasi ruang Kisi WPF ke kolom bintang
Detail
Dimulai dengan .NET Framework 4.7, WPF menggantikan algoritma yang Grid menggunakan untuk mengalokasikan ruang ke *-kolom. Ini akan mengubah lebar aktual 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.)
- Saat satu atau beberapa kolom-* mendeklarasikan berat-* yang sangat besar, lebih besar dari 10^298.
- Saat berat-* cukup berbeda untuk menemukan ketidakstabilan titik mengambang (luapan, underflow, hilangnya presisi).
- Saat 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 untuk kolom dapat melebihi lebar Kisi. Hal ini dapat terjadi jika ruang dialokasikan ke kolom yang pembagian proporsionalnya 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 bisa jauh dari lebar Kisi. Hal ini merupakan masalah ganda terkait #1, yang timbul saat mengalokasikan ke kolom yang pembagian proporsionalnya melebihi ukuran maksimumnya, tanpa kolom-* yang tersisa untuk dilonggarkan.
Dua kolom-* dapat menerima alokasi yang tidak sebanding dengan bobot-* nya. Ini adalah #1/#2 versi yang lebih ringan, yang timbul saat mengalokasikan ke kolom-* A, B, dan C (dalam urutan tersebut), dengan pembagian proporsionalnya B melanggar batasan minimumnya (atau maks). Seperti di atas, ini mengubah ruang yang tersedia untuk kolom C, yang mendapatkan lebih sedikit (atau lebih) alokasi proporsional daripada A.
Kolom dengan bobot yang sangat besar (> 10^298) semuanya diperlakukan seolah-olah memiliki bobot 10^298. Perbedaan proporsional di antara keduanya (dan antara kolom dengan bobot yang sedikit lebih kecil) tidak dianggap.
Kolom dengan bobot tak terbatas tidak ditangani dengan benar. (Sebenarnya Anda tidak dapat mengatur berat ke Infinity, tetapi ini adalah pembatasan buatan. Kode alokasi mencoba menanganinya, tetapi melakukan pekerjaan yang buruk.)
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 *-column tidak pernah kurang dari lebar minimumnya atau tidak lebih 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.
- Total lebar yang dialokasikan ke kolom-* yang "proporsional" sama dengan ruang yang tersedia setelah dialokasikan ke kolom terbatas (tetap, otomatis, dan kolom-* yang dialokasikan lebar min atau maks-nya). Ini mungkin nol, misalnya jika jumlah lebar minimumnya melebihi lebar Kisi yang tersedia.
- Semua pernyataan ini harus ditafsirkan sehubungan dengan tata letak "ideal". Saat pembulatan tata letak berlaku, lebar sebenarnya dapat berbeda dari lebar ideal sebanyak satu piksel.
Catatan
Semua yang dikatakan tentang kolom dan lebar dalam artikel ini juga berlaku 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 |
---|---|
Cakupan | Minor |
Versi | 4.7 |
Jenis | Penargetan Ulang |
Tumpukan Sentuh Berbasis Penunjuk WPF
Detail
Perubahan ini menambahkan kemampuan untuk mengaktifkan tumpukan sentuh/stylus WPF berbasis WM_POINTER opsional. Pengembang yang tidak secara eksplisit mengaktifkannya tidak akan melihat perubahan dalam perilaku sentuh/stylus WPF. Masalah Umum Saat Ini Terkait tumpukan sentuh/stylus berbasis WM_POINTER opsional:
- Tidak ada dukungan untuk pemberian tinta real time.
- Meskipun penintaan dan StylusPlugins tetap akan berfungsi, keduanya akan diproses pada Rangkaian UI yang dapat menyebabkan performa buruk.
- Perubahan perilaku karena perubahan promosi dari peristiwa sentuh/stylus ke peristiwa mouse
- Manipulasi mungkin berperilaku berbeda
- Seret/Lepas tidak akan menampilkan umpan balik yang sesuai untuk input sentuh
- Ini tidak memengaruhi input stylus
- Seret/Lepas tidak dapat lagi dimulai pada peristiwa sentuh/stylus
- Hal ini berpotensi menyebabkan aplikasi berhenti merespons hingga input mouse terdeteksi.
- Sebagai gantinya, pengembang harus memulai seret dan lepas dari peristiwa mouse.
Saran
Pengembang yang ingin mengaktifkan tumpukan ini dapat menambahkan/menggabungkan elemen berikut ke file App.config aplikasi mereka:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>
Menghapusnya atau mengatur nilai ke false akan menonaktifkan tumpukan opsional ini. Perhatikan bahwa tumpukan ini hanya tersedia di Windows 10 Creators Update dan versi yang lebih baru.
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7 |
Jenis | Penargetan Ulang |
Windows Workflow Foundation (WF)
Checksum alur kerja berubah dari MD5 menjadi SHA1
Detail
Untuk mendukung penelusuran kesalahan dengan Visual Studio, runtime Alur Kerja menghasilkan checksum untuk instans alur kerja menggunakan algoritma hash. Di .NET Framework 4.6.2 dan versi sebelumnya, hashing checksum alur kerja menggunakan algoritma MD5, yang menyebabkan masalah pada sistem yang didukung FIPS. Mulai dari .NET Framework 4.7, algoritmanya adalah SHA1. Jika kode Anda telah mempertahankan checksum ini, checksum tersebut tidak akan kompatibel.
Saran
Jika kode Anda tidak dapat memuat instans alur kerja karena kegagalan checksum, coba atur tombol AppContext
"Switch.System.Activities.UseMD5ForWFDebugger" menjadi 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 |
---|---|
Cakupan | Minor |
Versi | 4.7 |
Jenis | Penargetan Ulang |
.NET Framework 4.7.1
ASP.NET
Peningkatan Aksesibilitas ASP.NET di .NET Framework 4.7.1
Detail
Mulai dari .NET Framework 4.7.1, ASP.NET telah meningkatkan cara ASP.NET Web Controls menangani teknologi aksesibilitas di Visual Studio untuk mendukung pelanggan ASP.NET dengan lebih baik. Peningkatan ini mencakup perubahan berikut:
- Perubahan untuk menerapkan pola aksesibilitas antarmuka pengguna yang hilang di kontrol, seperti dialog Tambahkan Bidang di wizard Tampilan Detail, atau dialog Konfigurasikan ListView dari wizard ListView.
- Perubahan untuk meningkatkan tampilan dalam mode Kontras Tinggi, seperti Editor Bidang Penyeranta Data.
- Perubahan dalam meningkatkan pengalaman navigasi papan ketik untuk kontrol, seperti dialog Bidang dalam wizard Bidang Penyeranta Edit dari kontrol DataPager, dialog Konfigurasikan ObjectContext, atau dialog Konfigurasikan Pemilihan Data dari wizard Konfigurasikan Sumber Data.
Saran
Cara menerapkan atau menolak ini Agar Perancang Visual Studio dapat memanfaatkan perubahan ini, perancang harus berjalan di .NET Framework 4.7.1 atau versi yang lebih baru. Aplikasi web dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Instal Visual Studio 2017 15.3 atau versi yang lebih baru, yang mendukung fitur aksesibilitas baru dengan Tombol AppContext berikut secara default.
- Tolak perilaku aksesibilitas lama dengan menambahkan tombol AppContext
Switch.UseLegacyAccessibilityFeatures
ke 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 versi yang lebih baru dan ingin mempertahankan perilaku aksesibilitas lama dapat memilih untuk menggunakan fitur aksesibilitas lama dengan mengatur tombol AppContext ini ke true
secara eksplisit.
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
Inti
Pengecualian rangkaian latar belakang SerialPort
Detail
Rangkaian latar belakang yang dibuat dengan aliran SerialPort tidak lagi menghentikan proses saat pengecualian OS ditampilkan.
Dalam aplikasi yang menargetkan .NET Framework 4.7 dan versi yang lebih lama, proses dihentikan saat pengecualian sistem operasi dilemparkan pada percakapan latar belakang yang dibuat dengan aliran SerialPort.
Dalam aplikasi yang menargetkan .NET Framework 4.7.1 atau versi yang lebih baru, percakapan latar belakang menunggu peristiwa OS yang terkait dengan port serial aktif dan dapat mengalami crash dalam beberapa kasus, seperti penghapusan port serial secara tiba-tiba.
Saran
Untuk aplikasi yang menargetkan .NET Framework 4.7.1, Anda dapat menolak penanganan pengecualian jika tidak diinginkan dengan menambahkan hal berikut ke bagian <runtime>
dari file app.config
Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework yang lebih lama tetapi berjalan di .NET Framework 4.7.1 atau versi yang lebih baru, Anda dapat memilih penanganan pengecualian dengan menambahkan hal berikut ini ke bagian <runtime>
file app.config
Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
ServiceBase tidak menyebarkan pengecualian OnStart
Detail
Dalam .NET Framework 4.7 dan versi yang lebih lama, pengecualian yang dilemparkan saat memulai layanan tidak disebarkan ke pemanggil ServiceBase.Run.
Mulai dari aplikasi yang menargetkan .NET Framework 4.7.1, runtime bahasa umum menyebarkan pengecualian pada ServiceBase.Run untuk layanan yang gagal dimulai.
Saran
Saat layanan dimulai, jika ada pengecualian, pengecualian tersebut akan disebarkan. Hal ini akan membantu mendiagnosis kasus ketika layanan gagal dimulai.
Jika perilaku ini tidak diinginkan, Anda dapat menolaknya dengan menambahkan elemen AppContextSwitchOverrides
berikut ke bagian runtime
dari file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />
Jika aplikasi Anda menargetkan versi yang lebih lama daripada 4.7.1 tetapi Anda ingin memiliki perilaku ini, tambahkan elemen AppContextSwitchOverrides
berikut ke bagian runtime
dari file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Keamanan
Algoritma SignedXML dan SignedXMS default berubah menjadi SHA256
Detail
Dalam .NET Framework 4.7 dan yang lebih lama, SignedXML dan SignedCMS ditetapkan secara default ke SHA1 untuk beberapa operasi. Mulai dari .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 tombol konfigurasi berikut ke bagian runtime bahasa umum pada 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 ikut serta atas perubahan ini dengan menambahkan tombol konfigurasi berikut ke bagian runtime bahasa umum file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Nama | Nilai |
---|---|
Cakupan | Minor |
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 di net462 (atau lightup) tanpa perubahan penargetan ulang
Detail
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 di .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 tombol konfigurasi berikut ke bagian runtime bahasa umum pada file konfigurasi aplikasi Anda:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.6.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Windows Communication Foundation (WCF)
Peningkatan aksesibilitas untuk beberapa alat .NET SDK
Detail
Di .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 didefinisikan atau pola otomatisasi antarmuka pengguna tertentu tidak diterapkan dengan benar. Meski ada banyak pengguna yang tidak sadar akan nilai yang salah ini, pelanggan yang menggunakan teknologi bantuan seperti pembaca layar akan menganggap bahwa alat SDK ini lebih mudah diakses. Tentu saja, perbaikan ini mengubah beberapa perilaku sebelumnya, seperti urutan fokus papan ketik. Untuk mendapatkan semua perbaikan aksesibilitas di alat ini, Anda dapat melakukan hal berikut ke file app.config Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
Formulir Windows
Peningkatan aksesibilitas dalam kontrol Formulir Windows
Detail
Formulir Windows meningkatkan cara kerjanya dengan teknologi aksesibilitas untuk mendukung pelanggan Formulir Windows dengan lebih baik. Ini termasuk perubahan berikut mulai dari .NET Framework 4.7.1:
- Perubahan untuk meningkatkan tampilan selama mode Kontras Tinggi.
- Perubahan untuk meningkatkan pengalaman browser properti. Peningkatan browser properti meliputi:
- Navigasi keyboard yang lebih baik melalui berbagai jendela pilihan drop-down.
- Berkurangnya penghentian tab yang tidak perlu.
- Pelaporan jenis kontrol yang lebih baik.
- Perilaku narator yang ditingkatkan.
- Perubahan untuk menerapkan pola aksesibilitas antarmuka pengguna yang hilang dalam kontrol.
Saran
Cara memilih untuk ikut serta atau menolak perubahan ini Agar aplikasi dapat memanfaatkan perubahan ini, aplikasi harus berjalan di .NET Framework 4.7.1 atau versi yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Ini dikompilasi 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 versi yang lebih baru.
- Ini menolak perilaku aksesibilitas lama dengan menambahkan pengalihan AppContext berikut ke bagian
<runtime>
file app.config dan mengaturnya kefalse
, seperti yang ditunjukkan dalam 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 versi yang lebih baru dan ingin mempertahankan perilaku aksesibilitas lama dapat memilih untuk menggunakan fitur aksesibilitas lama dengan mengatur tombol AppContext ini ke true
secara eksplisit.
Untuk gambaran umum UI Automation, lihat Gambaran Umum Automation Antarmuka Pengguna.
Menambahkan dukungan untuk pola dan properti Automation UI
Klien aksesibilitas dapat memanfaatkan fungsionalitas aksesibilitas WinForms baru dengan menggunakan pola pemanggilan umum yang dijelaskan secara publik. 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, maka klien dapat menggunakan metode QueryService untuk meminta antarmuka IAccessibleEx. Untuk mengetahui informasi selengkapnya, lihat Menggunakan IAccessibleEx dari 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 Luaskan/Ciutkan.
Kontrol ToolStripMenuItem memiliki nilai properti ControlType dari ControlType.MenuItem.
Kontrol ToolStripItem mendukung properti NameProperty danpola Luaskan/Ciutkan.
Kontrol ToolStripDropDownItem mendukung AccessibleEvents yang menunjukkan StateChange dan NameChange saat drop down diperluas atau diciutkan.
Kontrol ToolStripDropDownButton memiliki nilai properti ControlTypeControlType.MenuItem.
Kontrol DataGridViewCheckBoxCell mendukung TogglePattern.
Kontrol NumericUpDown dan DomainUpDown mendukung properti NameProperty dan memiliki ControlType dari ControlType.Spinner.
Peningkatan 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 PropertyGrid mendukung pola Luaskan/Ciutkan, pemberitahuan perubahan status dan nama, serta properti ControlType dengan nilai ControlType.MenuItem.
Panel pesan yang ditampilkan saat tombol Detail dialog kesalahan diperluas sekarang dapat diakses melalui papan ketik dan memungkinkan Narator mengumumkan konten pesan kesalahan.
AccessibleRole dari baris dalam kontrol PropertyGrid telah berubah dari "Baris" menjadi "Sel". Sel memetakan ke "DataItem" UIA ControlType, sehingga dapat mendukung pintasan papan ketik yang sesuai, serta pengumuman Narator.
Baris kontrol PropertyGrid yang mewakili item header saat kontrol PropertyGrid memiliki properti PropertySort yang diatur menjadi PropertySort.Categorized memiliki nilai properti ControlTypeControlType.Button.
Baris kontrol PropertyGrid yang mewakili item header saat kontrol PropertyGrid memiliki properti PropertySort yang diatur menjadi PropertySort.Categorized mendukung pola Luaskan/Ciutkan.
Peningkatan terhadap navigasi papan ketik antara kisi dan ToolBar di atasnya. Sekarang, menekan "Shift-Tab" akan memilih tombol ToolBar pertama alih-alih seluruh ToolBar.
Kontrol PropertyGrid yang ditampilkan dalam mode Kontras Tinggi kini akan menggambar persegi panjang fokus di sekitar tombol ToolBar yang sesuai dengan nilai properti PropertySort saat ini.
Kontrol PropertyGrid yang ditampilkan dalam mode Kontras Tinggi dan dengan properti PropertySort yang diatur ke PropertySort.Categorized kini akan menampilkan latar belakang header kategori dalam warna yang sangat kontras.
Kontrol PropertyGrid dengan lebih baik membedakan antara item ToolBar dengan fokus dan item ToolBar yang menunjukkan nilai properti PropertySort saat ini. Perbaikan ini terdiri dari perubahan Kontras Tinggi dan perubahan untuk skenario non-Kontras Tinggi.
Item ToolBar kontrol PropertyGrid yang menunjukkan nilai properti PropertySort saat ini mendukung TogglePattern.
Dukungan Narator yang ditingkatkan untuk membedakan perataan yang dipilih dalam Pemilih Perataan.
Ketika kontrol PropertyGrid yang kosong ditampilkan pada formulir, kontrol kini akan menerima fokus yang sebelumnya tidak menerima.
Penggunaan warna yang ditentukan OS dalam tema Kontras Tinggi
- Kontrol Button dan CheckBox dengan properti FlatStyle diatur ke FlatStyle.System yang merupakan gaya default, kini menggunakan 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 berbayang untuk merender teks dalam Tema Kontras Tinggi, sehingga menghasilkan kontras latar belakang yang rendah. Kontrol ini kini menggunakan warna "Teks Nonaktif" yang ditentukan oleh OS. Perbaikan ini berlaku untuk kontrol dengan properti
FlatStyle
yang diatur ke nilai selain FlatStyle.System. Kontrol berikutnya dirender oleh OS. - DataGridView kini merender persegi panjang yang terlihat di sekitar isi sel yang memiliki fokus saat ini. Sebelumnya, ini tidak terlihat dalam tema Kontras Tinggi tertentu.
- Kontrol ToolStripMenuItem dengan properti Enabled diatur ke false kini menggunakan warna "Teks Nonaktif" yang ditentukan oleh OS.
- Kontrol ToolStripMenuItem dengan properti Checked diatur ke true sekarang merender tanda 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. Kerangka Kerja Formulir Windows didasarkan pada kerangka kerja Win32. Untuk mendapatkan 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 ditingkatkan
- Ketika kontrol ComboBox mengatur properti DropDownStyle-nya ke ComboBoxStyle.DropDownList dan merupakan kontrol pertama dalam urutan tab pada formulir, maka kini kontrol tersebut menampilkan persegi panjang fokus saat formulir induk dibuka dengan menggunakan papan ketik. Sebelum perubahan ini, fokus keyboard berada pada kontrol ini, tetapi indikator fokus tidak dirender.
Dukungan Narator yang ditingkatkan
Kontrol MonthCalendar telah menambahkan dukungan untuk teknologi berbantu guna mengakses kontrol, termasuk kemampuan bagi Narator untuk membaca nilai kontrol, yang sebelumnya tidak bisa.
Kontrol CheckedListBox kini memberi tahu Narator saat properti CheckBox.CheckState telah diubah. Sebelumnya, Narator tidak menerima pemberitahuan, sehingga pengguna tidak akan diberi tahu bahwa properti CheckState telah diperbarui.
Kontrol LinkLabel telah mengubah cara memberi tahu Narator 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 kini melaporkan status baca-saja dengan benar ke Narator dan teknologi berbantu lainnya.
Narator kini dapat membaca Menu Sistem jendela turunan di aplikasi [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md).
Sekarang, Narator dapat membaca kontrol ToolStripMenuItem dengan properti ToolStripItem.Enabled yang diatur ke false. Sebelumnya, Narator tidak dapat fokus pada item menu yang dinonaktifkan untuk membaca konten.
Nama | Nilai |
---|---|
Cakupan | Parah |
Versi | 4.8 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
Windows Presentation Foundation (WPF)
Peningkatan aksesibilitas di WPF
Detail
Peningkatan Kontras Tinggi
- Fokus untuk kontrol Expander kini terlihat. Dalam .NET Framework versi sebelumnya, ini tidak terlihat.
- Saat dipilih, teks di kontrol CheckBox dan RadioButton kini lebih mudah dilihat daripada di versi .NET Framework sebelumnya.
- Batas ComboBox yang dinonaktifkan kini memiliki warna yang sama dengan teks yang dinonaktifkan. Dalam .NET Framework versi sebelumnya, ini tidak terlihat.
- Tombol yang dinonaktifkan dan difokuskan kini menggunakan warna tema yang benar. Tombol tersebut tidak menggunakan warna tema yang sama di versi .NET Framework sebelumnya.
- Tombol dropdown sekarang terlihat bila gaya kontrol ComboBox diatur ke ToolBar.ComboBoxStyleKey. Dalam .NET Framework versi sebelumnya, ini tidak terlihat.
- Panah indikator pengurutan dalam kontrol DataGrid kini menggunakan warna tema. Di .NET Framework versi sebelumnya, kolom tersebut tidak menggunakannya.
- Gaya hyperlink default sekarang berubah menjadi warna tema yang benar saat mouse diarahkan ke hyperlink default tersebut. Di .NET Framework versi sebelumnya, kolom tersebut tidak menggunakannya.
- Fokus Papan ketik pada tombol radio sekarang terlihat. Dalam .NET Framework versi sebelumnya, ini tidak terlihat.
- Kolom kotak centang kontrol DataGrid sekarang menggunakan warna yang diharapkan untuk umpan balik fokus keyboard. Di .NET Framework versi sebelumnya, kolom tersebut tidak menggunakannya.
- Visual fokus Papan Ketik kini terlihat di kontrol ComboBox dan ListBox. Dalam .NET Framework versi sebelumnya, ini tidak terlihat.
Peningkatan interaksi pembaca layar
- Kontrol Expander kini diumumkan dengan benar sebagai grup (luaskan/ciutkan) oleh pembaca layar.
- Kontrol DataGridCell sekarang diumumkan dengan benar sebagai sel kisi data (dilokalisasi) oleh pembaca layar.
- Pembaca layar kini akan mengumumkan nama ComboBox yang dapat diedit.
- Kontrol PasswordBox tidak lagi diumumkan sebagai "tidak ada item dalam tampilan" oleh pembaca layar.
Dukungan LiveRegion
Pembaca layar, seperti Narator, membantu orang-orang dalam memahami antarmuka pengguna (UI) suatu aplikasi, biasanya dengan menjelaskan elemen antarmuka pengguna yang saat ini memiliki fokus. Namun, jika elemen antarmuka pengguna berubah di suatu tempat di layar dan tidak memiliki fokus, mungkin saja pengguna tidak diberi tahu dan kehilangan informasi yang penting. LiveRegions dimaksudkan untuk memecahkan masalah ini. Pengembang dapat menggunakannya untuk memberi tahu pembaca layar atau klien UI Automation lainnya bahwa perubahan penting telah dilakukan pada elemen antarmuka pengguna. Pembaca layar kemudian dapat memutuskan bagaimana dan kapan harus memberi tahu pengguna tentang perubahan ini. Properti LiveSetting juga memungkinkan pembaca layar mengetahui betapa pentingnya memberi tahu pengguna tentang perubahan yang dibuat pada antarmuka pengguna.
Saran
Cara ikut serta atau menolak perubahan ini
Agar aplikasi memanfaatkan perubahan ini, maka aplikasi harus berjalan pada .NET Framework 4.7.1 atau versi yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
Menargetkan .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.
Aplikasi menolak perilaku aksesibilitas lama dengan menambahkan Tombol AppContext berikut di 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" /> </runtime> </configuration>
Aplikasi yang menargetkan .NET Framework 4.7.1 atau versi yang lebih baru dan ingin mempertahankan perilaku aksesibilitas lama dapat memilih untuk menggunakan fitur aksesibilitas yang lama dengan mengatur pengalihan AppContext ini ke true
secara eksplisit.
Untuk gambaran umum automasi antarmuka pengguna, lihat Gambaran Umum UI Automation.
Nama | Nilai |
---|---|
Cakupan | Parah |
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()
Kejadian SelectionChanged pemilih dan properti SelectedValue
Detail
Mulai dari .NET Framework 4.7.1, Selector selalu memperbarui nilai properti SelectedValue-nya sebelum menampilkan kejadian SelectionChanged, saat pilihannya berubah. Ini membuat properti SelectedValue konsisten dengan properti pilihan lainnya (SelectedItem dan SelectedIndex), yang diperbarui sebelum menaikkan 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 SelectedValue properti.
Saran
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dapat menolak perubahan ini dan menggunakan perilaku lama dengan menambahkan hal berikut ke bagian <runtime>
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 |
---|---|
Cakupan | Minor |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Kejadian SelectionChanged TabControl dan properti SelectedContent
Detail
Mulai dari .NET Framework 4.7.1, TabControl memperbarui nilai properti SelectedContent-nya sebelum menampilkan tersebut SelectionChanged saat pilihannya berubah. Dalam .NET Framework 4.7 dan versi yang lebih lama, pembaruan ke SelectedContent terjadi setelah kejadian tersebut.
Saran
Aplikasi yang menargetkan .NET Framework 4.7.1 atau yang lebih baru dapat menolak perubahan ini dan menggunakan perilaku lama dengan menambahkan hal berikut ke bagian <runtime>
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 |
---|---|
Cakupan | Minor |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Algoritma hash default untuk WPF PackageDigitalSignatureManager sekarang adalah SHA256
Detail
System.IO.Packaging.PackageDigitalSignatureManager
menyediakan fungsionalitas untuk tanda tangan digital dalam kaitannya 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 baru-baru ini dengan SHA1, default ini telah diubah menjadi SHA256 mulai dari .NET Framework 4.7.1. Perubahan ini memengaruhi semua penandatanganan paket, termasuk dokumen XPS.
Saran
Pengembang yang ingin memanfaatkan perubahan ini saat menargetkan versi kerangka kerja di bawah versi .NET Framework 4.7.1, atau pengembang yang memerlukan fungsionalitas sebelumnya sambil menargetkan .NET Framework 4.7.1 atau versi yang lebih baru dapat mengatur bendera AppContext berikut dengan sesuai. Nilai true akan membuat SHA1 digunakan sebagai algoritma default; nilai false menghasilkan SHA256.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Windows Workflow Foundation (WF)
Peningkatan aksesibilitas di perancang alur kerja Windows Workflow Foundation (WF)
Detail
Perancang alur kerja Windows Workflow Foundation (WF) meningkatkan cara kerjanya dengan teknologi aksesibilitas. Peningkatan ini terdiri dari perubahan berikut:
- Urutan tab diubah dari kiri ke kanan dan atas ke bawah di 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 yang tersedia melalui keyboard:
- Saat mengedit properti aktivitas, grup properti dapat diciutkan dengan keyboard saat pertama kali difokuskan.
- Ikon peringatan kini dapat diakses dengan keyboard.
- Tombol Properti Lainnya di jendela Properti sekarang dapat diakses dengan papan ketik.
- Pengguna papan ketik kini dapat mengakses item header di panel Argumen dan Variabel Perancang Alur Kerja.
- Visibilitas item yang disempurnakan dengan fokus, seperti saat:
- Menambahkan baris ke kisi data yang digunakan oleh Perancang Alur Kerja dan perancang aktivitas.
- Men-tab melalui bidang dalam aktivitas ReceiveReply dan SendReply.
- Mengatur nilai default untuk variabel atau argumen
- Pembaca layar sekarang dapat mengenali beberapa hal berikut dengan benar:
- Titik henti yang diatur dalam perancang alur kerja.
- Aktivitas FlowSwitch<T>, FlowDecision, dan CorrelationScope.
- Konten aktivitas Receive.
- Jenis Target untuk aktivitas InvokeMethod.
- Combobox Pengecualian dan bagian Akhirnya dalam aktivitas TryCatch.
- Combobox Jenis Pesan, pemisah di jendela Tambahkan Inisialisasi Korelasi, jendela Definisi Konten, dan jendela Definisi CorrelatesOn dalam aktivitas olahpesan (Receive, Send, SendReply, dan ReceiveReply).
- Transisi mesin status serta tujuan transisi.
- Anotasi dan konektor pada aktivitas FlowDecision.
- Menu konteks (klik kanan) untuk aktivitas.
- Editor nilai properti, tombol Hapus Pencarian, tombol urutkan Berdasarkan Kategori dan Abjad, serta dialog Editor Ekspresi di kisi properti.
- Persentase perbesar tampilan 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.
- Breadcrumb di Perancang Alur kerja.
- Pengguna yang memilih tema Kontras Tinggi akan melihat banyak peningkatan visibilitas Perancang Alur Kerja serta kontrolnya, seperti rasio kontras yang lebih baik antara elemen dan kotak pilihan yang lebih mencolok yang digunakan untuk elemen fokus.
Saran
Jika Anda memiliki aplikasi dengan desainer alur kerja yang dihosting ulang, aplikasi Anda dapat memanfaatkan 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 versi lebih lama tetapi berjalan di .NET Framework 4.7.1, Anda dapat menolak perilaku aksesibilitas lama ini dengan menambahkan pengalihan AppContext berikut ke bagian
<runtime>
file app.config dan mengaturnya kefalse
, seperti yang ditunjukkan dalam 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 versi yang lebih baru dan ingin mempertahankan perilaku aksesibilitas lama dapat memilih untuk menggunakan fitur aksesibilitas lama dengan mengatur tombol AppContext ini ke true
secara eksplisit.
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.1 |
Jenis | Penargetan Ulang |
.NET Framework 4.7.2
Inti
Izinkan Karakter Kontrol Dua Arah Unicode dalam URI
Detail
Unicode menentukan beberapa karakter kontrol khusus yang digunakan untuk menentukan orientasi teks. Di versi .NET Framework sebelumnya, terdapat kesalahan yaitu dihapusnya karakter ini dari semua URI, meski sebenarnya karakter tetap ada dalam bentuk yang dienkode dengan persen. Untuk mengikuti RFC 3987 dengan lebih baik, kami sekarang mengizinkan karakter ini dalam URI. Ketika karakter tidak dienkode dalam URI, karakter akan dienkode dengan persen. Karakter akan dibiarkan jika dienkode dengan persen.
Saran
Untuk aplikasi yang menargetkan versi .NET Framework mulai dari 4.7.2, dukungan untuk karakter dua arah Unicode diaktifkan secara default. Jika perubahan ini tidak diinginkan, Anda dapat menonaktifkannya dengan menambahkan tombol AppContextSwitchOverrides berikut ke bagian <runtime>
file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework yang lebih lama tetapi berjalan di versi mulai dari .NET Framework 4.7.2, dukungan untuk karakter dua arah Unicode dinonaktifkan secara default. Anda dapat mengaktifkannya dengan menambahkan tombol AppContextSwitchOverrides berikut ke bagian <runtime>
file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
DeflateStream menggunakan API native untuk dekompresi
Detail
Mulai dari .NET Framework 4.7.2, penerapan dekompresi di kelas T:System.IO.Compression.DeflateStream
telah berubah untuk menggunakan Windows API native secara default. Biasanya, ini akan menghasilkan peningkatan performa yang substansial. Semua aplikasi .NET yang menargetkan .NET Framework versi 4.7.2 atau versi lebih tinggi menggunakan implementasi native. Perubahan ini dapat mengakibatkan beberapa perbedaan perilaku, termasuk:
- Pesan pengecualian mungkin berbeda. Namun, jenis pengecualian yang dilempar akan tetap sama.
- Dalam beberapa situasi khusus, misalnya tidak adanya memori yang cukup untuk menyelesaikan operasi, mungkin akan ditangani secara berbeda.
- Ada perbedaan umum dalam mengurai header gzip (catatan: hanya
GZipStream
yang diatur untuk dekompresi yang terpengaruh): - Pengecualian saat mengurai header yang tidak valid dapat dilempar pada waktu yang berbeda.
- Implementasi native memberlakukan bahwa nilai beberapa bendera khusus di dalam header gzip (yaitu FLG) akan diatur sesuai dengan spesifikasi, sehingga dapat menyebabkannya melempar pengecualian di tempat nilai yang sebelumnya tidak valid diabaikan.
Saran
Jika dekompresi dengan API asli berdampak buruk pada perilaku aplikasi Anda, Anda dapat menolak fitur ini dengan menambahkan tombol 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 |
---|---|
Cakupan | Minor |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Memastikan bahwa System.Uri menggunakan tataan karakter khusus yang konsisten
Detail
Dalam System.Uri, karakter tertentu yang dienkode dengan persen yang terkadang didekodekan sekarang akan dibiarkan dienkode secara konsisten. Tindakan ini terjadi di seluruh properti dan metode yang mengakses jalur, kueri, fragmen, atau komponen userinfo URI. Perilaku tersebut hanya akan berubah ketika kedua hal berikut ini benar:
- URI berisi bentuk yang dikodekan dari salah satu karakter cadangan berikut:
:
,'
,(
,)
,!
atau*
. - URI berisi Unicode atau karakter tidak khusus yang dikodekan. Jika kedua hal di atas benar, karakter khusus yang dikodekan akan dibiarkan dikodekan. Dalam versi .NET Framework sebelumnya, karakter tersebut didekodekan.
Saran
Untuk aplikasi yang menargetkan versi .NET Framework sejak versi 4.7.2, maka perilaku pendekodean yang baru akan diaktifkan secara default. Jika perubahan ini tidak diinginkan, Anda dapat menonaktifkannya dengan menambahkan tombol AppContextSwitchOverrides berikut ke bagian <runtime>
file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework yang lebih lama, tetapi berjalan dalam versi .NET Framework 4.7.2 ke atas, perilaku pendekodean baru akan dinonaktifkan secara default. Anda dapat mengaktifkannya dengan menambahkan tombol AppContextSwitchOverrides berikut ke bagian <runtime>
file konfigurasi aplikasi:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Resgen menolak untuk memuat konten dari web
Detail
File .resx mungkin berisi input berformat biner. Jika Anda mencoba menggunakan resgen dalam memuat file yang diunduh dari lokasi yang tidak tepercaya, secara default input akan gagal dimuat.
Saran
Pengguna resgen yang memerlukan pemuatan input berformat biner dari lokasi yang tidak tepercaya dapat menghapus tanda web dari file input atau menerapkan quirk penolakan. Tambahkan pengaturan registri berikut untuk menerapkan quirk penolakan seluruh mesin: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"
Nama | Nilai |
---|---|
Cakupan | Azure Stack 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
Detail
Mulai dari .NET Framework 4.7.2, jejak tumpukan yang diperoleh saat menggunakan PDB portabel menyertakan 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 meskipun diminta secara eksplisit.
Saran
Untuk aplikasi yang menargetkan .NET Framework 4.7.2, Anda dapat menolak file sumber dan informasi baris saat menggunakan PDB portabel jika tidak diinginkan dengan menambahkan hal berikut ke bagian <runtime>
file app.config
Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>
Untuk aplikasi yang menargetkan versi .NET Framework yang lebih lama tetapi berjalan di .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 hal berikut ke bagian <runtime>
file app.config
Anda:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Formulir Windows
Peningkatan aksesibilitas dalam kontrol Formulir Windows untuk .NET 4.7.2
Detail
Kerangka Kerja Formulir Windows meningkatkan cara kerjanya dengan teknologi aksesibilitas untuk mendukung pelanggan Formulir Windows dengan lebih baik. Peningkatan ini mencakup perubahan berikut:
- Perubahan untuk meningkatkan tampilan selama mode Kontras Tinggi.
- Perubahan untuk meningkatkan navigasi papan ketik di kontrol DataGridView dan MenuStrip.
- Perubahan interaksi dengan Narator.
Saran
Cara menerapkan atau menolak perubahan ini Agar aplikasi dapat memanfaatkan perubahan ini, aplikasi harus berjalan di .NET Framework 4.7.2 atau versi yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Aplikasi dikompilasi 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 versi yang lebih baru.
- Aplikasi menargetkan .NET Framework 4.7.1 atau versi yang lebih lama dan menolak perilaku aksesibilitas yang lama dengan menambahkan Tombol AppContext 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 di .NET Framework 4.7.2, Anda juga harus ikut serta dalam fitur aksesibilitas .NET Framework 4.7.1. Aplikasi yang menargetkan .NET Framework 4.7.2 atau versi yang lebih baru dan ingin mempertahankan perilaku aksesibilitas yang lama dapat memilih untuk menggunakan fitur aksesibilitas lama dengan mengatur tombol AppContext ini ke true
secara eksplisit.
Penggunaan warna yang ditentukan OS dalam tema Kontras Tinggi
- Tanda panah drop-down ToolStripDropDownButton kini menggunakan warna yang ditentukan OS dalam tema Kontras Tinggi.
- Kontrol Button, RadioButton dan CheckBox dengan FlatStyle yang diatur ke FlatStyle.Flat atau FlatStyle.Popup kini menggunakan warna yang ditentukan OS dalam tema Kontras Tinggi saat dipilih. Sebelumnya, warna teks dan latar belakang tidak kontras dan sulit dibaca.
- Kontrol yang ada dalamGroupBox dengan properti Enabled diatur ke
false
kini akan menggunakan warna yang ditentukan OS dalam tema Kontras Tinggi. - Kontrol ToolStripButton, ToolStripComboBox, dan ToolStripDropDownButton memiliki peningkatan rasio kontras luminositas dalam Mode Kontras Tinggi.
- DataGridViewLinkCell akan menggunakan warna yang ditentukan OS secara default dalam mode Kontras Tinggi untuk properti DataGridViewLinkCell.LinkColor. CATATAN: Windows 10 telah mengubah nilai untuk beberapa warna sistem kontras tinggi. Kerangka Kerja Formulir Windows didasarkan pada kerangka kerja Win32. Untuk mendapatkan 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 kini mengumumkan nilai properti ToolStripMenuItem.ShortcutKeys saat mengumumkan teks ToolStripMenuItem.
- Narator kini menunjukkan saat ToolStripMenuItem memiliki properti Enabled yang diatur menjadi
false
. - Narator kini memberikan umpan balik tentang status kotak centang saat properti ListView.CheckBoxes diatur menjadi
true
. - Urutan fokus Mode Pemindaian Narator kini konsisten dengan urutan visual kontrol di jendela dialog unduhan ClickOnce.
Peningkatan dukungan Aksesibilitas DataGridView
- Baris di DataGridView kini dapat diurutkan menggunakan papan ketik. Sekarang pengguna dapat menggunakan tombol F3 untuk mengurutkan berdasarkan kolom saat ini.
- Ketika DataGridView.SelectionMode diatur ke DataGridViewSelectionMode.FullRowSelect, header kolom akan berubah warna untuk menunjukkan kolom saat ini sebagai tab pengguna melalui sel di baris saat ini.
- Properti DataGridViewCell.DataGridViewCellAccessibleObject.Parent kini mengembalikan kontrol induk yang benar.
Isyarat Visual yang ditingkatkan
- Kontrol RadioButton dan CheckBox dengan properti Text kosong kini akan menampilkan indikator fokus saat keduanya menerima fokus.
Peningkatan Dukungan Kisi Properti
Elemen turunan kontrol PropertyGrid kini mengembalikan
true
untuk properti IsReadOnlyProperty hanya jika elemen PropertyGrid diaktifkan.Elemen turunan kontrol PropertyGrid kini mengembalikan
Navigasi keyboard yang ditingkatkanfalse
untuk properti IsEnabledProperty hanya jika elemen PropertyGrid dapat diubah oleh pengguna. Untuk gambaran umum UI Automation, lihat Gambaran Umum Automation Antarmuka Pengguna.ToolStripButton kini memungkinkan fokus jika terdapat dalam ToolStripPanel yang memiliki properti TabStop yang diatur menjadi
true
.
Nama | Nilai |
---|---|
Cakupan | Parah |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
Properti ContextMenuStrip.SourceControl berisi kontrol yang valid dalam kasus ToolStripMenuItems yang berlapis
Detail
Di .NET Framework 4.7.1 dan versi sebelumnya, properti ContextMenuStrip.SourceControl salah mengembalikan null saat pengguna membuka menu dari kontrol ToolStripMenuItem bertingkat. Di .NET Framework 4.7.2 dan versi yang lebih baru, properti SourceControl selalu diatur ke kontrol sumber yang sebenarnya.
Saran
Cara memilih untuk ikut serta atau menolak perubahan ini Agar aplikasi dapat memanfaatkan perubahan ini, aplikasi harus berjalan di .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Aplikasi 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.
- Perubahan ini menargetkan .NET Framework 4.7.1 atau versi lebih lama dan menolak dari perilaku aksesibilitas lama dengan menambahkan Pengalihan AppContext 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 lama dapat memilih untuk menggunakan nilai kontrol sumber lama dengan secara eksplisit mengatur pengalihan AppContext ini ke true
.
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Metode PrivateFontCollection.AddFontFile merilis sumber daya Font
Detail
Di .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 versi yang lebih baru, Dispose merilis font GDI+ yang ditambahkan ke koleksi sebagai file.
Saran
Cara memilih untuk ikut serta atau menolak perubahan ini Agar aplikasi dapat memanfaatkan perubahan ini, aplikasi harus berjalan di .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Aplikasi dikompilasi 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.
- Perubahan ini menargetkan .NET Framework 4.7.1 atau versi lebih lama dan menolak dari perilaku aksesibilitas lama dengan menambahkan Pengalihan AppContext 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 lama dapat memilih untuk tidak merilis sumber daya font dengan secara eksplisit mengatur pengalihan AppContext ini menjadi true
.
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Tindakan upbutton dan downbutton Domain WinForm disinkronkan sekarang
Detail
Di .NET Framework 4.7.1 dan versi sebelumnya, tindakan DomainUpDown.UpButton() kontrol DomainUpDown diabaikan saat ada teks kontrol, dan pengembang diharuskan menggunakan tindakan DomainUpDown.DownButton() pada kontrol sebelum menggunakan tindakan DomainUpDown.UpButton(). Mulai dari .NET Framework 4.7.2, tindakan DomainUpDown.UpButton() dan DomainUpDown.DownButton() bekerja secara independen dalam skenario ini dan tetap sinkron.
Saran
Agar aplikasi mendapat manfaat dari perubahan ini, aplikasi harus berjalan di .NET Framework 4.7.2 atau yang lebih baru. Aplikasi dapat memperoleh manfaat dari perubahan ini dengan salah satu cara berikut:
- Aplikasi dikompilasi 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 menolak perilaku pengguliran lama dengan menambahkan Pengalihan AppContext berikut ke bagian
<runtime>
dari file konfigurasi aplikasi dan mengaturnya menjadifalse
, seperti yang ditunjukkan contoh berikut.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
API yang Terpengaruh
Windows Presentation Foundation (WPF)
Fokus keyboard kini bergerak dengan benar di beberapa lapisan hosting WinForms/WPF
Detail
Pertimbangkan aplikasi WPF yang menghosting kontrol WinForms yang nantinya akan menghosting kontrol WPF. Pengguna mungkin tidak dapat keluar dari lapisan WinForms jika kontrol pertama atau terakhir di lapisan itu adalah System.Windows.Forms.Integration.ElementHost
WPF. Perubahan ini memperbaiki masalah ini, dan pengguna sekarang dapat keluar dari lapisan WinForms. Aplikasi otomatis yang mengandalkan fokus yang tidak pernah keluar dari lapisan WinForms mungkin tidak lagi berfungsi seperti yang diharapkan.
Saran
Pengembang yang ingin memanfaatkan perubahan ini saat menargetkan versi kerangka kerja di bawah .NET 4.7.2 dapat mengatur kumpulan 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, pengalihan Switch.UseLegacyAccessibilityFeatures
dan Switch.UseLegacyAccessibilityFeatures.2
harus diatur. Pengembang yang memerlukan fungsionalitas sebelumnya saat menargetkan .NET 4.7.2 atau lebih tinggi dapat mengatur bendera AppContext berikut menjadi true agar perubahan dinonaktifkan.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
Algoritma hash default untuk Kompiler Markup WPF sekarang adalah SHA256
Detail
WPF MarkupCompiler menyediakan layanan kompilasi untuk file markup XAML. Di .NET Framework 4.7.1 dan versi lebih lama, algoritme hash default yang digunakan untuk checksum adalah SHA1. Karena masalah keamanan baru-baru ini dengan SHA1, algoritma default ini telah diubah menjadi SHA256 mulai dari .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 versi yang lebih baru 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 hashing 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 dipasang harus 4.7.2 atau lebih tinggi.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Transparan |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
Penanganan Penonaktifan AppDomain WPF Sekarang Dapat Memanggil Dispatcher.Invoke dalam Pembersihan Peristiwa Yang Lemah
Detail
Di .NET Framework 4.7.1 dan versi lebih lama, WPF berpotensi membuat System.Windows.Threading.Dispatcher di utas pengakhir .NET selama penonaktifan AppDomain. Ini telah diperbaiki di .NET Framework 4.7.2 dan versi yang lebih baru dengan membuat pembersihan peristiwa lemah yang sensitif terhadap utas. Karena itu, WPF dapat memanggil Dispatcher.Invoke untuk menyelesaikan proses pembersihan. Dalam aplikasi tertentu, perubahan waktu pengakhir ini berpotensi menyebabkan pengecualian selama penonaktifan AppDomain atau proses. Hal ini umumnya terlihat dalam aplikasi yang tidak mematikan pengirim dengan benar yang berjalan pada rangkaian pekerja sebelum mematikan proses atau AppDomain. Aplikasi tersebut harus berhati-hati untuk mengelola masa pakai dispatcher dengan benar.
Saran
Di .NET Framework 4.7.2 dan versi yang lebih baru, pengembang dapat menonaktifkan perbaikan ini untuk membantu meringankan (tetapi tidak menghilangkan) masalah pengaturan waktu yang mungkin terjadi karena perubahan pembersihan. Untuk menonaktifkan perubahan dalam pembersihan, gunakan bendera AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
WPF Mengubah kunci primer saat menampilkan data ADO dalam skenario Master/Detail
Detail
Misalkan Anda memiliki koleksi ADO item jenis Order
, dengan relasi bernama "OrderDetails" yang menghubungkannya dengan koleksi item jenis Detail
melalui kunci primer "OrderID". Di aplikasi WPF, Anda dapat mengikat kontrol daftar ke detail untuk urutan tertentu:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
di mana DataContext adalah Order
. WPF mendapatkan nilai properti OrderDetails
- kumpulan D dari semua item Detail
yang OrderID
-nya cocok dengan OrderID
item master. Perubahan perilaku muncul saat Anda mengubah kunci primer OrderID
dari item master. ADO secara otomatis mengubah OrderID
setiap data yang terpengaruh dalam koleksi Detail (yakni yang disalin ke dalam koleksi D). Apa yang terjadi dengan D?
- Perilaku lama: Koleksi D dibersihkan. Item master tidak memunculkan pemberitahuan perubahan untuk
OrderDetails
properti. 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 denganOrderID
baru. WPF mengimplementasikan perilaku baru dengan membuat koleksi D dengan cara yang berbeda: dengan memanggil metode ADO DataRowView.CreateChildView(DataRelation, Boolean) dengan argumenfollowParent
diatur menjaditrue
.
Saran
Aplikasi mendapatkan perilaku baru dengan menggunakan tombol 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 lebih rendah, dan ke false
(perilaku baru) untuk aplikasi yang menargetkan .NET 4.7.2 atau lebih tinggi.
Nama | Nilai |
---|---|
Cakupan | Minor |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
FocusVisual WPF untuk RadioButton dan CheckBox Sekarang Ditampilkan Dengan Benar Saat Kontrol Tidak Memiliki Konten
Detail
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, memiliki visual fokus yang salah. Masalah ini terjadi dalam kasus kontrol tidak memiliki kumpulan konten apa pun. Masalah ini dapat membuat transisi di antara tema-tema membingungkan dan visual fokus sulit dilihat. Di .NET Framework 4.7.2, visual ini sekarang lebih konsisten di seluruh tema dan lebih mudah terlihat di 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 memanfaatkan 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 dipasang harus 4.7.2 atau yang lebih baru.Aplikasi WPF diharuskan untuk menerima semua peningkatan aksesibilitas sebelumnya untuk mendapatkan peningkatan terbaru. Untuk melakukannya, pastikan AppContext mengalihkan 'Switch.UseLegacyAccessibilityFeatures' dan 'Switch.UseLegacyAccessibilityFeatures.2' diatur ke false.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
Pemilihan Teks WPF TextBox/PasswordBox Tidak Mengikuti Warna Sistem
Detail
Di .NET Framework 4.7.1 dan versi lebih lama, System.Windows.Controls.TextBox
dan System.Windows.Controls.PasswordBox
WPF hanya dapat merender pilihan teks di lapisan Adorner. Dalam beberapa tema sistem, ini akan menutupi teks, sehingga sulit untuk dibaca. Di .NET Framework 4.7.2 dan yang lebih baru, pengembang memiliki pilihan untuk mengaktifkan skema perenderan pilihan berbasis non-Adorner yang meringankan masalah ini.
Saran
Pengembang yang ingin memanfaatkan perubahan ini harus mengatur bendera AppContext berikut dengan tepat. Untuk memanfaatkan fitur ini, versi .NET Framework yang dipasang harus 4.7.2 atau lebih tinggi.Untuk mengaktifkan pilihan berbasis non-adorner, gunakan bendera AppContext berikut.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |
Windows Workflow Foundation (WF)
Menghindari rekursi tanpa akhir untuk IWorkflowInstanceManagement.TransactedCancel dan IWorkflowInstanceManagement.TransactedTerminate
Detail
Dalam beberapa keadaan saat menggunakan API IWorkflowInstanceManagement.TransactedCancel atau IWorkflowInstanceManagement.TransactedTerminate untuk membatalkan atau menghentikan instans layanan alur kerja, instans alur kerja mungkin mengalami luapan tumpukan karena rekursi tak berujung saat runtime bahasa umum 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 pekerjaan ini tidak dijalankan sebagai bagian dari pemrosesan permintaan TransactedCancel/TransactedTerminate
. Karena instans layanan alur kerja sibuk menunggu permintaan WCF penting lainnya yang belum selesai, item pekerjaan yang dibuat tetap diantrekan. Operasi TransactedCancel/TransactedTerminate
selesai dan kontrol dikembalikan ke klien. Ketika transaksi yang terkait dengan operasi TransactedCancel/TransactedTerminate
mencoba untuk diterapkan, transaksi tersebut harus mempertahankan status instans layanan alur kerja. Namun karena ada permintaan WCF
penting untuk instans, runtime bahasa umum Alur Kerja tidak dapat mempertahankan instans layanan alur kerja, dan perulangan rekursi tanpa akhir mengakibatkan luapan tumpukan. Karena TransactedCancel
dan TransactedTerminate
hanya membuat item kerja di memori, walaupun ada transaksi yang tidak memengaruhi apa pun. Pemutaran kembali transaksi tidak menghapus item kerja. Untuk mengatasi 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 meminta untuk mengabaikan transaksi untuk TransactedCancel
dan TransactedTerminate
. Ini memungkinkan transaksi untuk diterapkan tanpa menunggu instans alur kerja dipertahankan. AppSetting untuk fitur ini dinamai microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate
. Nilai true
menunjukkan bahwa transaksi harus diabaikan, sehingga menghindari luapan tumpukan. Nilai default AppSetting ini adalah false
, sehingga instans layanan alur kerja yang ada tidak terpengaruh.
Saran
Jika Anda menggunakan AppFabric atau klien IWorkflowInstanceManagement lain dan mengalami luapan tumpukan di instans layanan alur kerja saat mencoba membatalkan atau menghentikan instans alur kerja, Anda dapat menambahkan berikut ini ke bagian <appSettings>
dari file web.config/app.config untuk layanan alur kerja:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Jika Anda tidak mengalami masalah tersebut, Anda tidak perlu melakukan ini.
Nama | Nilai |
---|---|
Cakupan | Azure Stack Edge |
Versi | 4.7.2 |
Jenis | Penargetan Ulang |