Bagikan melalui


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

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

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

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 ke false, 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

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 ke false, 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:

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

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 ke false, 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

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 ke false, 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.configAnda:

<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 ke false, 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

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

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 ke false, 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 ke false, 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 menjadi false, 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 dengan OrderID baru. WPF mengimplementasikan perilaku baru dengan membuat koleksi D dengan cara yang berbeda: dengan memanggil metode ADO DataRowView.CreateChildView(DataRelation, Boolean) dengan argumen followParent diatur menjadi true.

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