Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini mencantumkan masalah kompatibilitas aplikasi yang diperkenalkan dalam .NET Framework 4.5, 4.5.1, dan 4.5.2.
.NET Framework 4.5
ASP.NET
GridViews dengan AllowCustomPaging yang diatur ke true dapat memicu peristiwa PageIndexChanging saat meninggalkan halaman akhir tampilan
Detail-detail
Bug di .NET Framework 4.5 menyebabkan System.Web.UI.WebControls.GridView.PageIndexChanging terkadang tidak dijalankan untuk System.Web.UI.WebControls.GridView yang telah mengaktifkan System.Web.UI.WebControls.GridView.AllowCustomPaging.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut. Sebagai solusinya, aplikasi dapat melakukan BindGrid eksplisit di semua Page_Load yang akan mencapai kondisi ini (System.Web.UI.WebControls.GridView ada di halaman terakhir dan System.Web.UI.WebControls.GridView.PageSize terakhir berbeda dengan System.Web.UI.WebControls.GridView.PageSize). Sebagai alternatif, aplikasi dapat dimodifikasi agar penomoran halaman dapat dilakukan (bukan penomoran halaman kustom), karena skenario tersebut tidak menunjukkan masalah.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Properti HttpRequest.ContentEncoding melarang UTF7
Detail-detail
Sejak .NET Framework 4.5, pengodean UTF-7 dilarang di dalam badan System.Web.HttpRequest. Dalam beberapa kasus, data aplikasi yang bergantung pada data UTF-7 yang masuk tidak akan didekodekan dengan benar.
Saran
Secara ideal, aplikasi harus diperbarui agar tidak menggunakan pengodean UTF-7 dalam System.Web.HttpRequest. Atau, perilaku lama dapat dipulihkan dengan menggunakan atribut aspnet:AllowUtf7RequestContentEncoding dari elemen appSettings.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
HttpUtility.JavaScriptStringEncode menghindari ampersan
Detail-detail
Dimulai dengan .NET Framework 4.5, System.Web.HttpUtility.JavaScriptStringEncode(String) lolos dari karakter ampersand (&) .
Saran
Jika aplikasi Anda bergantung pada perilaku sebelumnya dari metode ini, Anda dapat menambahkan pengaturan aspnet:JavaScriptDoNotEncodeAmpersand ke elemen ASP.NET appSettings di file konfigurasi Anda.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
IPad tidak boleh digunakan dalam file kemampuan kustom karena sekarang merupakan kemampuan browser
Detail-detail
Mulai dari .NET Framework 4.5, iPad adalah pengidentifikasi dalam file kemampuan browser ASP.NET default. Oleh karena itu, tidak boleh digunakan dalam file kemampuan kustom.
Saran
Jika kemampuan khusus iPad diperlukan, Anda harus mengubah perilaku iPad dengan mengatur kemampuan pada gateway yang telah ditentukan dengan refID "IPad", bukan dengan menciptakan ID "IPad" baru melalui pencocokan agent pengguna.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
Peristiwa Page.LoadComplete tidak lagi menyebabkan kontrol System.Web.UI.WebControls.EntityDataSource memanggil pengikatan data
Detail-detail
Kejadian LoadComplete ini tidak lagi menyebabkan kontrol System.Web.UI.WebControls.EntityDataSource memanggil pengikatan data untuk perubahan pada parameter buat/perbarui/hapus. Perubahan ini menghilangkan perjalanan asing ke database, mencegah nilai kontrol diatur ulang, dan menghasilkan perilaku yang konsisten dengan kontrol data lainnya, seperti System.Web.UI.WebControls.SqlDataSource dan System.Web.UI.WebControls.ObjectDataSource. Perubahan ini menghasilkan perilaku yang berbeda dalam kasus yang tidak terduga jika aplikasi bergantung pada pemanggilan pengikatan data dalam peristiwa LoadComplete.
Saran
Jika ada kebutuhan untuk pengikatan data, panggil databind secara manual dalam kejadian yang lebih awal sebelum postback.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Pembuatan profil aplikasi ASP.NET MVC4 dapat menyebabkan Kesalahan Mesin Eksekusi Fatal
Detail-detail
Profiler yang menggunakan assembly NGEN /Profile dapat menyebabkan crash pada aplikasi ASP.NET MVC4 saat memulai dengan 'Pengecualian Mesin Eksekusi Fatal'
Saran
Masalah ini diperbaiki di .NET Framework 4.5.2. Sebagai alternatif, profiler dapat menghindari masalah ini dengan menentukan COR_PRF_DISABLE_ALL_NGEN_IMAGES dalam masker kejadiannya.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Membagikan status sesi dengan StateServer ASP.NET mengharuskan agar semua server di farm web menggunakan versi .NET Framework yang sama
Detail-detail
Jika status sesi System.Web.SessionState.SessionStateMode.StateServer diaktifkan, semua server di farm web yang diberikan harus menggunakan versi .NET Framework yang sama agar status dibagikan dengan benar.
Saran
Pastikan untuk meningkatkan versi .NET Framework di server web yang berbagi status secara bersamaan.
| Nilai | |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
WebUtility.HtmlDecode tidak lagi menerjemahkan urutan input yang tidak valid
Detail-detail
Secara default, metode dekode tidak lagi mendekode urutan input yang tidak valid menjadi string UTF-16 yang tidak valid. Sebaliknya, mereka mengembalikan input asli.
Saran
Perubahan dalam output dekoder seharusnya hanya menjadi masalah hanya jika Anda menyimpan data biner, bukan data UTF-16 dalam string. Untuk mengontrol perilaku ini secara eksplisit, atur atribut aspnet:AllowRelaxedUnicodeDecoding dari elemen appSettings ke true untuk mengaktifkan perilaku lama atau ke false untuk mengaktifkan perilaku saat ini.
| Nilai | |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- WebUtility.HtmlDecode(String)
- WebUtility.HtmlDecode(String, TextWriter)
- WebUtility.UrlDecode(String)
Inti
Rakitan yang dikompilasi dengan Regex.CompileToAssembly tidak kompatibel antara 4.0 dan 4.5
Detail-detail
Jika rakitan ekspresi reguler yang dikompilasi dibuat dengan .NET Framework 4.5 tetapi menargetkan .NET Framework 4, mencoba menggunakan salah satu ekspresi reguler di rakitan tersebut di sistem dengan .NET Framework 4 yang terinstal akan menimbulkan pengecualian.
Saran
Untuk mengatasi masalah ini, Anda dapat melakukan salah satu dari berikut ini:
- Bangun rakitan yang berisi regex dengan .NET Framework 4.
- Gunakan ekspresi reguler yang ditafsirkan.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName)
- Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])
- Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)
BlockingCollection<T>.TryTakeFromAny tidak ditampilkan lagi
Detail-detail
Jika salah satu koleksi masukan ditandai selesai, TryTakeFromAny(BlockingCollection<T>[], T) tidak lagi mengembalikan -1 dan TakeFromAny(BlockingCollection<T>[], T) tidak lagi melemparkan pengecualian. Perubahan ini memungkinkan penanganan koleksi saat salah satu koleksi kosong atau selesai, tetapi koleksi lainnya masih memiliki item yang dapat diambil.
Saran
Jika TryTakeFromAny yang mengembalikan -1 atau pelemparan TakeFromAny digunakan untuk tujuan alur kontrol dalam kasus koleksi pemblokiran yang telah selesai, kode harus diubah agar dapat menggunakan .Any(b => b.IsCompleted) untuk mendeteksi kondisi tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- BlockingCollection<T>.TakeFromAny(BlockingCollection<T>[], T)
- BlockingCollection<T>.TakeFromAny(BlockingCollection<T>[], T, CancellationToken)
- BlockingCollection<T>.TryTakeFromAny(BlockingCollection<T>[], T)
- BlockingCollection<T>.TryTakeFromAny(BlockingCollection<T>[], T, Int32)
- BlockingCollection<T>.TryTakeFromAny(BlockingCollection<T>[], T, TimeSpan)
- BlockingCollection<T>.TryTakeFromAny(BlockingCollection<T>[], T, TimeSpan)
Perubahan perilaku pada metode Task.WaitAll dengan argumen batas waktu
Detail-detail
Perilaku Task.WaitAll dibuat lebih konsisten dalam .NET Framework 4.5. Di .NET Framework 4, metode ini tidak berperilaku dengan konsisten. Ketika waktu habis berakhir, jika satu atau lebih tugas diselesaikan atau dibatalkan sebelum pemanggilan metode, metode tersebut melemparkan pengecualian System.AggregateException. Ketika waktu habis berakhir, dan jika tidak ada tugas yang diselesaikan atau dibatalkan sebelum panggilan metode, tetapi ada satu atau lebih tugas yang memasuki status ini setelah panggilan metode, metode akan mengembalikan nilai false.
Di .NET Framework 4.5, kini, kelebihan beban metode ini akan mengembalikan false jika ada tugas yang masih berjalan ketika interval waktu habis sudah berakhir, dan pengecualian System.AggregateException akan dilemparkan hanya jika tugas input dibatalkan (tanpa melihat waktu dilakukannya pembatalan, sebelum atau sesudah panggilan metode) dan tidak ada tugas lain yang masih berjalan.
Saran
Jika sebuah System.AggregateException digunakan untuk mendeteksi tugas yang dibatalkan sebelum WaitAll dipanggil, sebaiknya kode tersebut melakukan deteksi yang sama melalui properti IsCanceled (contohnya: .Any(t => t.IsCanceled)) karena pada .NET Framework 4.6 pengecualian hanya akan dimunculkan dalam kasus itu jika semua tugas yang ditunggu sudah selesai sebelum batas waktu.
| Nilai | |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- Task.WaitAll(Task[], Int32)
- Task.WaitAll(Task[], Int32, CancellationToken)
- Task.WaitAll(Task[], TimeSpan)
Dukungan kompiler untuk penerusan jenis saat menargetkan beberapa mscorlib
Detail-detail
Fitur CodeDOM baru memungkinkan kompiler mengkompilasi terhadap versi target mscorlib.dll, bukan versi .NET Framework 4.5 dari mscorlib.dll.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
ConcurrentQueue<T>.TryPeek dapat mengembalikan null yang salah melalui parameter out-nya
Detail-detail
Dalam beberapa skenario multi-utas, System.Collections.Concurrent.ConcurrentQueue<T>.TryPeek(T) dapat mengembalikan true, tetapi mengisi parameter keluar dengan nilai null (bukan nilai yang benar dan diintip).
Saran
Masalah ini diperbaiki di .NET Framework 4.5.1. Meng-upgrade ke Framework tersebut dapat menyelesaikan masalah.
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
ETW EventListeners tidak menangkap peristiwa dari penyedia dengan kata kunci eksplisit (seperti penyedia TPL)
Detail-detail
ETW EventListeners dengan masker kata kunci kosong tidak menangkap kejadian dengan tepat dari penyedia yang memiliki kata kunci eksplisit. Di .NET Framework 4.5, penyedia TPL mulai menyediakan kata kunci eksplisit dan memicu masalah ini. Di .NET Framework 4.6, EventListeners telah diperbarui agar tidak lagi mengalami masalah ini.
Saran
Untuk mengatasi masalah ini, ganti panggilan ke EnableEvents(EventSource, EventLevel) dengan panggilan ke overload EnableEvents yang secara eksplisit menentukan masker "kata kunci apa pun" yang akan digunakan: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)).
Sebagai alternatif, masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Pengecualian selama pemrosesan yang tidak terpantau dalam System.Threading.Tasks.Task tidak lagi menyebar pada thread finalizer.
Detail-detail
Karena kelas System.Threading.Tasks.Task mewakili operasi asinkron, kelas ini menangkap semua pengecualian tidak berat yang terjadi selama pemrosesan asinkron. Di .NET Framework 4.5, jika pengecualian tidak diamati dan kode Anda tidak pernah menunggu tugas, pengecualian tidak akan lagi melakukan penyebaran di rangkaian finalizer dan menghentikan proses selama pengumpulan sampah. Perubahan ini meningkatkan keandalan aplikasi yang menggunakan kelas Tugas untuk melakukan pemrosesan asinkron yang tidak teramati.
Saran
Jika aplikasi bergantung pada pengecualian asinkron yang tidak teramati yang menyebar ke rangkaian finalizer, perilaku sebelumnya dapat dipulihkan dengan menyediakan penangan yang sesuai untuk peristiwa UnobservedTaskException, atau dengan mengatur elemen konfigurasi waktu proses.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- Task.Run(Action)
- Task.Run(Action, CancellationToken)
- Task.Run(Func<Task>)
- Task.Run(Func<Task>, CancellationToken)
- Task.Run<TResult>(Func<TResult>)
- Task.Run<TResult>(Func<TResult>, CancellationToken)
- Task.Run<TResult>(Func<Task<TResult>>)
- Task.Run<TResult>(Func<Task<TResult>>, CancellationToken)
- Task.Start()
- Task.Start(TaskScheduler)
Algoritma List.Sort berubah
Detail-detail
Mulai dari .NET Framework 4.5, algoritme pengurutan System.Collections.Generic.List<T> telah berubah (menjadi pengurutan introspektif, bukan pengurutan cepat). Pengurutan System.Collections.Generic.List<T> tidak pernah stabil, tetapi perubahan ini dapat menyebabkan skenario yang berbeda untuk mengurutkan dengan cara yang tidak stabil. Artinya, item yang setara dapat diurutkan dalam urutan yang berbeda dalam pemanggilan API berikutnya.
Saran
Karena algoritme pengurutan yang lama juga tidak stabil (meskipun dengan cara yang sedikit berbeda), seharusnya tidak ada kode yang bergantung pada item yang setara yang selalu diurutkan dalam urutan tertentu. Jika ada contoh kode yang bergantung pada perilaku lama dan beruntung karena perilaku tersebut, maka kode itu harus diperbarui dengan menggunakan pembanding yang akan mengurutkan item secara deterministik dalam urutan yang diinginkan.
| Nama | Nilai |
|---|---|
| Cakupan | Transparan |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- List<T>.Sort()
- List<T>.Sort(IComparer<T>)
- List<T>.Sort(Comparison<T>)
- List<T>.Sort(Int32, Int32, IComparer<T>)
Moniker Kerangka Kerja Target yang Hilang menyebabkan perilaku versi 4.0
Detail-detail
Aplikasi yang tidak menerapkan System.Runtime.Versioning.TargetFrameworkAttribute pada tingkat rakitan akan secara otomatis berjalan dengan menggunakan semantik (quirks) dari .NET Framework 4.0. Untuk memastikan kualitas tinggi, disarankan agar semua biner diberi atribut secara eksplisit dengan System.Runtime.Versioning.TargetFrameworkAttribute yang menunjukkan versi .NET Framework saat dibuat. Perhatikan bahwa menggunakan moniker kerangka kerja target dalam file proyek akan menyebabkan MSBuild secara otomatis menerapkan System.Runtime.Versioning.TargetFrameworkAttribute.
Saran
System.Runtime.Versioning.TargetFrameworkAttribute harus disediakan, baik dengan menambahkan atribut secara langsung ke rakitan atau dengan menetapkan bingkai target di file proyek atau melalui GUI properti proyek Visual Studio.
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Beberapa API .NET menyebabkan pengecualian EntryPointNotFoundExceptions (tertangani) pada kesempatan pertama
Detail-detail
Di .NET Framework 4.5, sejumlah kecil metode .NET mulai melontarkan "first chance" System.EntryPointNotFoundException. Pengecualian ini ditangani dalam .NET Framework, tetapi dapat mengganggu otomatisasi pengujian yang tidak mengharapkan pengecualian temuan awal. API yang sama ini memutuskan beberapa skenario ApiVerifier saat HighVersionLie diaktifkan.
Saran
Bug ini dapat dihindari dengan melakukan peningkatan ke versi .NET Framework 4.5.1. Atau, otomatisasi pengujian dapat diperbarui untuk tidak melanggar pengecualian kesempatan System.EntryPointNotFoundException pertama.
| Nilai | |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- Debug.Assert(Boolean)
- Debug.Assert(Boolean, String)
- Debug.Assert(Boolean, String, String)
- Debug.Assert(Boolean, String, String, Object[])
- XmlSerializer(Type)
System.Threading.Tasks.Task tidak lagi menampilkan ObjectDisposedException setelah objek dibuang
Detail-detail
Kecuali untuk IAsyncResult.AsyncWaitHandle, metode System.Threading.Tasks.Task tidak lagi menampilkan pengecualian System.ObjectDisposedException setelah objek dibuang. Perubahan ini mendukung penggunaan tugas yang di-cache. Misalnya, suatu metode dapat mengembalikan tugas yang di-cache untuk mewakili operasi yang sudah selesai alih-alih mengalokasikan tugas baru. Ini tidak mungkin dilakukan di versi .NET Framework sebelumnya, karena setiap konsumen tugas dapat membuangnya, yang membuatnya tidak dapat digunakan.
Saran
Perlu diketahui bahwa metode Tugas mungkin tidak lagi melemparkan System.ObjectDisposedException saat objek dibuang. Jika aplikasi bergantung pada pengecualian ini untuk mengetahui bahwa tugas telah dibuang, aplikasi harus diperbarui untuk secara eksplisit memeriksa status tugas menggunakan Status.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Penghindaran System.Uri sekarang mendukung RFC 3986
Detail-detail
Pelolosan URI telah berubah di .NET Framework 4.5 untuk mendukung RFC 3986. Perubahan khusus meliputi:
- System.Uri.EscapeDataString(String) meng-escape karakter khusus berdasarkan RFC 3986.
- System.Uri.EscapeUriString(String) tidak melepaskan karakter terlarang.
- System.Uri.UnescapeDataString(String) tidak menampilkan pengecualian jika menemukan urutan escape yang tidak valid.
- Karakter escape yang tidak dicadangkan tidak di-escape.
Saran
- Perbarui aplikasi agar tidak bergantung pada System.Uri.UnescapeDataString(String) untuk ditampilkan jika terjadi urutan escape yang tidak valid. Urutan seperti itu harus dideteksi secara langsung sekarang.
- Demikian pula, perlu diketahui bahwa string URI Escaped dan Unescaped, serta string Data dapat bervariasi dari .NET Framework 4.0 dan .NET Framework 4.5, dan tidak boleh dibandingkan di seluruh versi .NET secara langsung. Sebaliknya, string tersebut harus diuraikan dan dinormalisasi dalam satu versi .NET sebelum perbandingan apa pun dibuat.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Data Informasi
Data sql_variant menggunakan kolase sql_variant, bukan kolase database
Detail-detail
Data sql_variant menggunakan kolase sql_variant, bukan kolase database.
Saran
Perubahan ini mengatasi kemungkinan kerusakan data jika kolase database berbeda dari kolase sql_variant. Aplikasi yang mengandalkan data yang rusak mungkin mengalami kegagalan.
| Nama | Nilai |
|---|---|
| Cakupan | Transparan |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
SqlBulkCopy menggunakan pengodean kolom tujuan untuk string
Detail-detail
Saat menyisipkan data ke dalam kolom, System.Data.SqlClient.SqlBulkCopy menggunakan pengodean kolom tujuan daripada pengodean default untuk jenis VARCHAR dan CHAR. Perubahan ini menghilangkan kemungkinan kerusakan data yang disebabkan oleh penggunaan pengodean default ketika kolom tujuan tidak menggunakan pengodean default. Dalam kasus yang jarang terjadi, aplikasi yang sudah ada dapat melemparkan pengecualian SqlException jika perubahan pengodean menghasilkan data yang terlalu besar untuk bisa masuk ke kolom tujuan.
Saran
Harapkan bahwa System.Data.SqlClient.SqlBulkCopy tidak akan lagi merusak data karena perbedaan pengodean. Jika string berada di dekat batas ukuran kolom tujuan yang akan disalin, mungkin perlu melakukan pengodean data sebelumnya (memeriksa apakah data akan muat di kolom tujuan) atau menangkap System.Data.SqlClient.SqlException.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
SqlConnection tidak dapat lagi terhubung ke SQL Server 1997 atau database menggunakan adapter VIA
Detail-detail
Sambungan ke database SQL Server yang menggunakan protokol Adapter Antarmuka Virtual (VIA) tidak lagi didukung. Protokol yang digunakan untuk menyambung ke database SQL Server terlihat di string koneksi. Koneksi VIA akan berisi via:<servername>. Jika aplikasi ini tersambung ke SQL melalui protokol selain VIA (tcp: atau np: misalnya), tidak akan ada perubahan yang mengganggu. Selain itu, koneksi ke SQL Server 7 (1997) tidak lagi didukung.
Saran
Protokol VIA tidak digunakan lagi, jadi protokol alternatif harus digunakan untuk menyambungkan ke database SQL. Protokol yang paling umum digunakan adalah TCP/IP. Untuk mengetahui informasi selengkapnya mengenai cara menyambungkan melalui TCP/IP, lihat Mengaktifkan protokol TCP/IP untuk instans database. Jika database hanya diakses dari dalam intranet, protokol alur yang sama dapat memberikan performa yang lebih baik jika jaringan lambat.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
SqlConnection.Open gagal pada Windows 7 dengan keberadaan LSP atau BSP Winsock non-IFS
Detail-detail
Open() dan OpenAsync(CancellationToken) gagal di .NET Framework 4.5 jika berjalan di komputer Windows 7 dengan adanya LSP atau BPS Winsock non-IFS di komputer. Untuk menentukan apakah LSP atau BSP non-IFS diinstal, gunakan perintah netsh WinSock Show Catalog, dan periksa setiap item Winsock Catalog Provider Entry yang dikembalikan. Jika nilai Bendera Layanan memiliki bit 0x20000 yang diatur, penyedia menggunakan handle IFS dan akan berfungsi dengan benar. Jika 0x20000 bit sudah jelas (tidak diatur), berarti ini adalah LSP atau BSP non-IFS.
Saran
Bug ini telah diperbaiki di .NET Framework 4.5.2, sehingga dapat dihindari dengan meningkatkan versi .NET Framework. Atau, hal ini dapat dihindari dengan menghapus LSP Winsock non-IFS yang terinstal.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Pemecah Masalah
Nilai penggabungan null tidak terlihat di debugger hingga satu langkah berikutnya
Detail-detail
Bug di .NET Framework 4.5 menyebabkan nilai yang ditetapkan melalui operasi penggabungan null tidak langsung terlihat di debugger setelah operasi penetapan dieksekusi saat dijalankan di Framework versi 64-bit.
Saran
Melakukan langkah tambahan dalam debugger akan menyebabkan nilai lokal atau bidang diperbarui secara akurat. Selain itu, masalah ini telah diperbaiki di .NET Framework 4.6; meningkatkan ke versi Framework tersebut akan menyelesaikan masalah.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Kerangka Kerja Entitas
Perubahan perilaku di API Bahasa Definisi Data (DDL)
Detail-detail
Perilaku API DDL saat AttachDBFilename ditentukan telah berubah sebagai berikut:
- String koneksi tidak perlu menentukan nilai Initial Catalog. Sebelumnya, AttachDBFilename dan Katalog Awal diperlukan.
- Jika AttachDBFilename dan Katalog Awal ditentukan, dan ada file MDF yang diberikan, metode DatabaseExists akan mengembalikan
true. Sebelumnya, metode tersebut mengembalikanfalse. - Jika baik AttachDBFilename maupun Katalog Awal ditentukan dan file MDF yang diberikan sudah ada, maka panggilan ke metode DeleteDatabase akan menghapus file-file tersebut.
- Jika DeleteDatabase dipanggil saat string koneksi menetapkan nilai AttachDBFilename dengan MDF yang tidak ada, serta Katalog Awal yang tidak ada, metode akan melemparkan pengecualian InvalidOperationException. Sebelumnya, metode tersebut melemparkan pengecualian SqlException.
Saran
Perubahan ini mempermudah pembangunan alat dan aplikasi yang menggunakan API DDL. Perubahan ini dapat memengaruhi kompatibilitas aplikasi dalam skenario berikut:
- Pengguna menulis kode yang menjalankan perintah
DROP DATABASEsecara langsung, bukan memanggil DeleteDatabase jika DatabaseExists mengembalikantrue. Tindakan ini merusak kode yang ada Jika database tidak dilampirkan tetapi file MDF ada. - Pengguna menulis kode yang mengharapkan metode DeleteDatabase menampilkan SqlException daripada InvalidOperationException ketika Katalog Awal dan file MDF tidak ada.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Penanganan pengecualian yang berbeda untuk metode ObjectContext.CreateDatabase dan DbProviderServices.CreateDatabase
Detail-detail
Mulai dari .NET Framework 4.5, jika pembuatan database gagal, metode CreateDatabase akan mencoba menghilangkan database yang kosong. Jika operasi tersebut berhasil, System.Data.SqlClient.SqlException asli akan disebarkan (bukan System.InvalidOperationException, yang selalu dilemparkan ke .NET Framework 4.0)
Saran
Saat menangkap System.InvalidOperationException ketika menjalankan CreateDatabase() atau CreateDatabase(DbConnection, Nullable<Int32>, StoreItemCollection), sekarang Anda juga harus menangkap SQLExceptions.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- ObjectContext.CreateDatabase()
- DbProviderServices.CreateDatabase(DbConnection, Nullable<Int32>, StoreItemCollection)
EntityFramework 6.0 dimuat dengan sangat lambat di aplikasi yang diluncurkan dari Visual Studio
Detail-detail
Meluncurkan aplikasi dari Visual Studio 2013 yang menggunakan EntityFramework 6.0 bisa sangat lambat.
Saran
Masalah ini diperbaiki di EntityFramework 6.0.2. Perbarui EntityFramework untuk menghindari masalah performa.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Nama file log yang dibuat oleh metode ObjectContext.CreateDatabase telah diubah agar sesuai dengan spesifikasi SQL Server
Detail-detail
Ketika metode System.Data.Objects.ObjectContext.CreateDatabase() dipanggil baik secara langsung atau dengan menggunakan Code First dengan penyedia SqlClient dan nilai AttachDBFilename dalam string koneksi, metode membuat file log bernama filename_log.ldf, bukan namafile.ldf (di mana nama file adalah nama file yang ditentukan oleh nilai AttachDBFilename). Perubahan ini meningkatkan penelusuran kesalahan dengan menyediakan file log yang diberi nama berdasarkan spesifikasi SQL Server.
Saran
Jika nama file log penting bagi suatu aplikasi, aplikasi tersebut harus diperbarui agar mengharapkan format nama file _log.ldf standar.
| Nilai | |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
ObjectContext.Translate dan ObjectContext.ExecuteStoreQuery sekarang mendukung jenis enum
Detail-detail
Di .NET Framework 4.0, parameter generik T dari metode ObjectContext.Translate dan ObjectContext.ExecuteStoreQuery tidak boleh berupa enum. Skenario tersebut sekarang didukung.
Saran
Jika Translate atau ExecuteStoreQuery dipanggil pada jenis enum di .NET Framework 4.0, '0' akan dikembalikan. Jika perilaku tersebut diinginkan, panggilan harus diganti dengan konstanta 0 (atau enum yang setara dengan itu).
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- ObjectContext.Translate<TElement>(DbDataReader)
- ObjectContext.Translate<TEntity>(DbDataReader, String, MergeOption)
- ObjectContext.ExecuteStoreQuery<TElement>(String, Object[])
- ObjectContext.ExecuteStoreQuery<TEntity>(String, String, MergeOption, Object[])
LINQ
Enumerable.Empty<TResult> selalu mengembalikan instans yang sudah di-cache
Detail-detail
Mulai dari .NET Framework 4.5, Empty<TResult>() selalu mengembalikan instans internal yang di-cache IEnumerable<T>. Sebelumnya, Empty<TResult>() akan men-cache IEnumerable<T> kosong pada saat API dipanggil. Artinya, dalam beberapa kondisi saat Empty<TResult>() dipanggil dengan cepat dan bersamaan, jenis instans yang berbeda dapat dikembalikan untuk panggilan berbeda ke API.
Saran
Karena perilaku sebelumnya non-deterministik, kode tidak mungkin bergantung padanya. Namun, dalam kasus yang sangat jarang terjadi, saat enumerasi kosong dibandingkan dan diharapkan agar terkadang tidak sama, array kosong yang eksplisit harus dibuat (new T[0]), bukan menggunakan Empty<TResult>().
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Kerangka Kerja Ekstensibilitas Terkelola (MEF)
Katalog MEF mengimplementasikan IEnumerable dan karenanya tidak dapat lagi digunakan untuk membuat serializer
Detail-detail
Mulai dari .NET Framework 4.5, katalog MEF menerapkan IEnumerable, sehingga tidak dapat lagi digunakan untuk membuat serializer (objek System.Xml.Serialization.XmlSerializer). Usaha untuk melakukan serialisasi katalog MEF menghasilkan pengecualian.
Saran
Tidak dapat menggunakan MEF untuk membuat serializer lagi
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Jaringan
Deserialisasi objek MailMessage yang diserialkan di .NET Framework 4.5 mungkin gagal
Detail-detail
Mulai dari .NET Framework 4.5, objek MailMessage dapat menyertakan karakter non-ASCII. Di .NET Framework 4, hanya karakter ASCII yang didukung. Objek MailMessage yang berisi karakter non-ASCII dan yang diserialisasi di .NET Framework versi 4.5 atau yang lebih baru tidak dapat dideserialisasi pada .NET Framework versi 4.
Saran
Pastikan kode Anda menyediakan penanganan pengecualian saat membatalkan serialisasi objek MailMessage.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
System.Net.PeerToPeer.Collaboration tidak tersedia di Windows 8
Detail-detail
Namespace System.Net.PeerToPeer.Collaboration tidak tersedia di Windows 8 atau di atasnya.
Saran
Aplikasi yang mendukung Windows 8 atau lebih tinggi harus diperbarui agar tidak bergantung pada namespace ini atau anggotanya.
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Pencetakan
Data yang ditulis ke PrintSystemJobInfo.JobStream harus dalam format XPS
Detail-detail
Properti JobStream mengekspos aliran pekerjaan cetak. Pengguna dapat mengirim data mentah ke komponen pencetakan sistem operasi yang mendasarinya dengan menulis ke aliran ini. Mulai dengan .NET Framework 4.5 pada Windows 8 dan versi sistem operasi Windows yang lebih baru, data yang ditulis ke aliran ini harus dalam format XPS sebagai aliran paket.
Saran
Untuk menampilkan konten cetak, Anda dapat melakukan salah satu hal berikut:
- Gunakan kelas XpsDocumentWriter untuk menampilkan konten cetak. Hal ini merupakan alternatif yang direkomendasikan.
- Pastikan bahwa data yang dikirim ke aliran yang dikembalikan oleh properti JobStream dalam format XPS sebagai aliran paket.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Serialisasi
BinaryFormatter dapat gagal menemukan jenis dari konteks LoadFrom
Detail-detail
Mulai dari .NET Framework 4.5, sejumlah perubahan System.Xml.Serialization.XmlSerializer dapat menyebabkan perbedaan dalam deserialisasi saat menggunakan System.Runtime.Serialization.Formatters.Binary.BinaryFormatter untuk mendeserialisasi jenis yang telah dimuat dalam konteks LoadFrom. Perubahan ini disebabkan oleh cara baru System.Xml.Serialization.XmlSerializer yang sekarang memuat jenis yang menyebabkan perilaku berbeda saat System.Runtime.Serialization.Formatters.Binary.BinaryFormatter mencoba mendeserialisasi ke jenis tersebut nanti. Pengikat serialisasi default tidak secara otomatis mencari konteks dari LoadFrom, meskipun mungkin berhasil dalam sejumlah kondisi berdasarkan perilaku lama XmlSerializer. Karena perubahan tersebut, ketika tipe sedang dimuat dari rakitan yang dimuat dalam konteks yang berbeda, System.IO.FileNotFoundException mungkin dilemparkan.
Peringatan
Serialisasi biner dengan BinaryFormatter bisa berbahaya. Untuk informasi selengkapnya, lihat panduan keamanan BinaryFormatter dan panduan migrasi BinaryFormatter.
Saran
Jika ada pengecualian ini, properti Binder dari System.Runtime.Serialization.Formatters.Binary.BinaryFormatter dapat diatur ke binder khusus yang dapat menemukan jenis yang benar.
var formatter = new BinaryFormatter { Binder = new TypeFinderBinder() }
Dan kemudian binder kustom:
public class TypeFinderBinder : SerializationBinder
{
private static readonly string s_assemblyName = Assembly.GetExecutingAssembly().FullName;
public override Type BindToType(string assemblyName, string typeName)
{
return Type.GetType(String.Format(CultureInfo.InvariantCulture, "{0}, {1}", typeName, s_assemblyName));
}
}
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- BinaryFormatter.Deserialize(Stream)
- BinaryFormatter.Deserialize(Stream, HeaderHandler)
SoapFormatter tidak dapat mendeserialisasi Hashtable dan objek koleksi terurut serupa
Detail-detail
System.Runtime.Serialization.Formatters.Soap.SoapFormatter tidak menjamin bahwa objek yang diserialisasi di bawah satu versi .NET Framework akan berhasil dideserialisasi di bawah versi yang berbeda. Secara khusus, beberapa kumpulan terurut (seperti System.Collections.Hashtable) menambahkan anggota antara 4.0 dan 4.5 sehingga objek jenis ini tidak dapat dideserialisasikan dengan .NET Framework 4.0 jika mereka diserialisasikan dengan .NET Framework 4.5. Perhatikan bahwa jika data telah diserialisasi dan dideserialisasi dengan versi .NET Framework yang sama, tidak akan ada masalah.
Saran
System.Runtime.Serialization.Formatters.Soap.SoapFormatter Serialisasi harus diganti dengan serializer yang tahan terhadap perubahan .NET Framework. Contohnya termasuk System.Text.Json dan System.Runtime.Serialization.DataContractSerializer.
Peringatan
Serialisasi biner dengan BinaryFormatter bisa berbahaya. Untuk informasi selengkapnya, lihat panduan keamanan BinaryFormatter dan panduan migrasi BinaryFormatter.
Peringatan
Jangan bingung DataContractSerializer dengan NetDataContractSerializer. NetDataContractSerializer diidentifikasi sebagai serializer berbahaya.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- SoapFormatter.Serialize(Stream, Object)
- SoapFormatter.Serialize(Stream, Object, Header[])
- SoapFormatter.Deserialize(Stream)
- SoapFormatter.Deserialize(Stream, HeaderHandler)
XmlSerializer gagal saat menserialisasi jenis yang menyembunyikan anggota yang bisa diakses dengan anggota yang tidak bisa diakses
Detail-detail
Saat menserialisasi jenis turunan, System.Xml.Serialization.XmlSerializer dapat gagal jika jenis tersebut berisi bidang atau properti yang tidak dapat diakses yang menyembunyikan (melalui kata kunci 'baru') bidang atau properti dengan nama yang sama, yang sebelumnya dapat diakses (misalnya publik) di jenis dasar.
Saran
Masalah ini dapat diselesaikan dengan membuat anggota baru yang bersembunyi dapat diakses oleh System.Xml.Serialization.XmlSerializer (misalnya dengan menandainya secara publik). Atau, pengaturan konfigurasi berikut akan kembali ke perilaku 4.0 System.Xml.Serialization.XmlSerializer , yang akan memperbaiki masalah:
<system.xml.serialization>
<xmlSerializer useLegacySerializerGeneration="true" />
</system.xml.serialization>
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- XmlSerializer.Serialize(Stream, Object)
- XmlSerializer.Serialize(TextWriter, Object)
- XmlSerializer.Serialize(Object, XmlSerializationWriter)
- XmlSerializer.Serialize(XmlWriter, Object)
- XmlSerializer.Serialize(Stream, Object, XmlSerializerNamespaces)
- XmlSerializer.Serialize(TextWriter, Object, XmlSerializerNamespaces)
- XmlSerializer.Serialize(XmlWriter, Object, XmlSerializerNamespaces)
- XmlSerializer.Serialize(XmlWriter, Object, XmlSerializerNamespaces, String)
- XmlSerializer.Serialize(XmlWriter, Object, XmlSerializerNamespaces, String, String)
Aplikasi Web
Kontrol hosting browser terkelola dari .NET Framework 1.1 dan 2.0 diblokir
Detail-detail
Penyajian kontrol ini diblokir di Internet Explorer.
Saran
Internet Explorer akan gagal meluncurkan aplikasi yang menggunakan kontrol hosting browser terkelola. Perilaku sebelumnya dapat dipulihkan dengan mengatur nilai EnableIEHosting dari subkunci registri HKLM/SOFTWARE/MICROSOFT/.NETFramework ke 1 untuk sistem x86 dan untuk proses 32-bit pada sistem x64, dan dengan mengatur nilai EnableIEHosting dari subkunci registri HKLM/SOFTWARE/Wow6432Node/Microsoft/.NETFramework ke 1 untuk proses 64-bit pada sistem x64.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Windows Communication Foundation (WCF)
Kode kesalahan untuk maxRequestLength atau maxReceivedMessageSize berbeda
Detail-detail
Pesan di layanan web WCF yang dihosting di Internet Information Services (IIS) atau Server Pengembangan ASP.NET yang melebihi maxRequestLength (di ASP.NET) atau maxReceivedMessageSize (di WCF) memiliki kode kesalahan yang berbeda. Kode status HTTP telah berubah dari 400 (Permintaan Buruk) menjadi 413 (Permintaan Entitas Terlalu Besar), dan pesan yang melebihi setelan maxRequestLength atau maxReceivedMessageSize menimbulkan pengecualian System.ServiceModel.ProtocolException. Ini termasuk kasus di mana mode transfer adalah Streaming.
Saran
Perubahan ini memfasilitasi penelusuran kesalahan dalam kasus saat panjang pesan melebihi batas yang diizinkan oleh ASP.NET atau WCF. Anda harus mengubah kode apa pun yang melakukan pemrosesan berdasarkan kode status HTTP 400.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Objek System.ServiceModel.Web.WebServiceHost tidak lagi menambahkan titik akhir default
Detail-detail
Objek WebServiceHost tidak lagi menambahkan titik akhir default jika titik akhir eksplisit telah ditambahkan oleh kode aplikasi.
Saran
Jika pengguna berharap dapat tersambung ke titik akhir default dan titik akhir eksplisit lainnya telah ditambahkan ke System.ServiceModel.Web.WebServiceHost, titik akhir default juga harus ditambahkan secara eksplisit (menggunakan System.ServiceModel.ServiceHostBase.AddDefaultEndpoints()).
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- ServiceHost.AddServiceEndpoint(Type, Binding, String)
- ServiceHost.AddServiceEndpoint(Type, Binding, Uri)
- ServiceHost.AddServiceEndpoint(Type, Binding, String, Uri)
- ServiceHost.AddServiceEndpoint(Type, Binding, Uri, Uri)
- ServiceHost.AddServiceEndpoint(Type, Binding, Uri, Uri)
- ServiceHostBase.AddServiceEndpoint(ServiceEndpoint)
- ServiceHostBase.AddServiceEndpoint(String, Binding, String)
- ServiceHostBase.AddServiceEndpoint(String, Binding, Uri)
- ServiceHostBase.AddServiceEndpoint(String, Binding, String, Uri)
- ServiceHostBase.AddServiceEndpoint(String, Binding, Uri, Uri)
Metode Ganti di URL OData dinonaktifkan secara default
Detail-detail
Mulai dari .NET Framework 4.5, metode Ganti di URL OData dinonaktifkan secara default. Ketika Penggantian OData dinonaktifkan (sekarang secara default), permintaan pengguna apa pun termasuk fungsi penggantian (yang tidak umum) akan gagal.
Saran
Jika metode ganti diperlukan (yang tidak umum), metode ini dapat diaktifkan kembali melalui pengaturan konfigurasi (System.Data.Services.Configuration.DataServicesFeaturesSection.ReplaceFunction). Namun, metode penggantian yang diaktifkan dapat membuka kerentanan keamanan dan hanya boleh digunakan setelah peninjauan yang cermat.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Formulir Windows
PreviewLostKeyboardFocus dipanggil berulang kali jika penangannya menampilkan kotak pesan Windows Forms
Detail-detail
Mulai dari .NET Framework 4.5, pemanggilan MessageBox.Show dari penangan PreviewLostKeyboardFocus akan menyebabkan penangan tersebut diaktifkan kembali saat kotak pesan ditutup, yang berpotensi menghasilkan perulangan kotak pesan tak terbatas.
Saran
Ada dua opsi untuk mengatasi masalah ini:
- Masalah ini dapat dihindari dengan memanggil MessageBox.Show, bukan MessageBox.Show.
- Ini dapat dihindari dengan menampilkan kotak pesan dari penanganan aktivitas LostKeyboardFocus (sebagai lawan dari penanganan aktivitas System.Windows.UIElement.PreviewLostKeyboardFocus).
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- ContentElement.PreviewLostKeyboardFocus
- IInputElement.PreviewLostKeyboardFocus
- UIElement.PreviewLostKeyboardFocus
- UIElement3D.PreviewLostKeyboardFocus
Properti CheckForOverflowUnderflow pada WinForm sekarang bernilai benar untuk System.Drawing
Detail-detail
Properti CheckForOverflowUnderflow untuk assembly System.Drawing.dll diatur ke benar.
Saran
Sebelumnya, ketika terjadi overflow, hasilnya akan dipotong tanpa pemberitahuan. Sekarang pengecualian System.OverflowException ditampilkan.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Windows Presentation Foundation (WPF)
Mengakses item yang dipilih WPF DataGrid dari pengendali acara UnloadingRow DataGrid dapat menyebabkan NullReferenceException
Detail-detail
Dikarenakan bug di .NET Framework 4.5, penanganan aktivitas untuk peristiwa DataGrid yang melibatkan penghapusan baris dapat menyebabkan System.NullReferenceException muncul jika mereka mengakses properti DataGrid atau System.Windows.Controls.Primitives.Selector.SelectedItem milik System.Windows.Controls.Primitives.MultiSelector.SelectedItems.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Memanggil DataGrid.CommitEdit dari penangan CellEditEnding menyebabkan hilangnya fokus.
Detail-detail
Memanggil CommitEdit() dari salah satu penanganan peristiwa System.Windows.Controls.DataGridSystem.Windows.Controls.DataGrid.CellEditEnding menyebabkan System.Windows.Controls.DataGrid kehilangan fokus.
Saran
Bug ini telah diperbaiki di .NET Framework 4.5.2, sehingga dapat dihindari dengan meningkatkan versi .NET Framework. Sebagai alternatif, ini dapat dihindari dengan secara eksplisit memilih ulang System.Windows.Controls.DataGrid setelah memanggil System.Windows.Controls.DataGrid.CommitEdit().
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Memanggil Items.Refresh pada ListBox, ListView, atau DataGrid WPF dengan item yang dipilih dapat menyebabkan item duplikat muncul di elemen
Detail-detail
Di .NET Framework 4.5, memanggil ListBox.Items.Refresh dari kode saat item dipilih di System.Windows.Controls.ListBox dapat menyebabkan item yang dipilih diduplikasi dalam daftar. Masalah serupa terjadi dengan System.Windows.Controls.ListView dan System.Windows.Controls.DataGrid. Masalah ini diperbaiki di .NET Framework 4.6.
Saran
Masalah ini dapat diatasi dengan membatalkan pilihan item secara terprogram sebelum System.Windows.Data.CollectionView.Refresh() dipanggil lalu memilihnya kembali setelah panggilan selesai. Sebagai alternatif, masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nilai | |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
FlowDocument dapat menampilkan baris teks tambahan
Detail-detail
Dalam beberapa kasus, elemen FlowDocument akan menampilkan baris teks tambahan saat dijalankan di .NET Framework 4.5 dibandingkan dengan tampilannya saat dijalankan di .NET Framework 4.0. Tidak ada kasus perubahan yang diketahui menyebabkan teks apa pun ditampilkan dengan buruk atau tidak terbaca, tetapi dapat menyebabkan teks muncul yang sebelumnya dihilangkan dari tampilan FlowDocument.
Saran
Dalam beberapa kasus, mengurangi properti PageHeight elemen tampilan sebanyak satu dapat mengembalikan jumlah baris yang ditampilkan sebelumnya.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Mulai dari .NET Framework 4.5, GlyphRun.ComputeInkBoundingBox() dan FormattedText.Extent mengembalikan nilai yang berbeda
Detail-detail
Perbaikan dilakukan pada ComputeInkBoundingBox() dan Extent di .NET Framework 4.5 untuk mengatasi masalah di mana kotak terlalu kecil untuk glif yang terkandung dalam beberapa kasus di .NET Framework 4.0. Akibatnya, mulai dari .NET Framework 4.5, beberapa kotak batas akan lebih besar, sehingga menghasilkan sedikit perbedaan dalam tata letak antarmuka pengguna.
Saran
Perlu diketahui bahwa beberapa ukuran kotak pembatas glif telah meningkat. Perubahan ini biasanya akan meningkatkan presentasi dan pengujian kotak hit, tetapi jika perilaku yang lebih lama (sebelum .NET 4.5) diinginkan, perilaku tersebut dapat dipilih dengan menambahkan entri berikut ke file app.config:
<appsettings>
<add key="IncludeAllInkInBoundingBox" value="false">
</appsettings>
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Secara intermiten, tidak bisa menggulir ke item paling bawah di ItemsControls (seperti ListBox dan DataGrid) saat menggunakan Template Data kustom
Detail-detail
Dalam beberapa kasus, bug pada .NET Framework 4.5 menyebabkan ItemsControls (seperti System.Windows.Controls.ListBox, System.Windows.Controls.ComboBox, System.Windows.Controls.DataGrid, dll.) tidak bergulir ke item paling bawah saat menggunakan DataTemplates kustom. Jika pengguliran diupayakan kedua kalinya (setelah menggulir kembali ke atas), maka ini akan berfungsi.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.5.2 dan dapat diatasi dengan meningkatkan .NET Framework ke versi tersebut (atau versi yang lebih baru). Sebagai alternatif, pengguna masih dapat menarik bilah gulir ke item akhir dalam koleksi ini, tetapi mungkin perlu mencoba dua kali agar berhasil melakukannya.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Items.Clear tidak menghapus duplikat dari SelectedItems
Detail-detail
Misalkan Pemilih (dengan beberapa pilihan diaktifkan) memiliki duplikat dalam koleksi System.Windows.Controls.Primitives.MultiSelector.SelectedItems - item yang sama muncul lebih dari sekali. Penghapusan item tersebut dari sumber data (misalnya, dengan memanggil Item.Clear) gagal menghapusnya dari System.Windows.Controls.Primitives.MultiSelector.SelectedItems; hanya instans pertama yang dihapus. Selain itu, penggunaan System.Windows.Controls.Primitives.MultiSelector.SelectedItems berikutnya (misalnya, SelectedItems.Clear()) dapat mengalami masalah seperti System.ArgumentException, karena System.Windows.Controls.Primitives.MultiSelector.SelectedItems berisi item yang tidak lagi berada dalam sumber data.
Saran
Tingkatkan jika memungkinkan ke .NET Framework 4.6.2.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Masalah pengikatan ListBoxItem IsSelected dengan ObservableCollection<T>.Move
Detail-detail
Memanggil Move(Int32, Int32) atau MoveItem(Int32, Int32) pada koleksi yang terikat ke System.Windows.Controls.ListBox dengan item yang dipilih dapat menyebabkan perilaku tidak terduga dalam pilihan atau pembatalan pilihan item System.Windows.Controls.ListBox di kemudian hari.
Saran
Memanggil System.Collections.ObjectModel.Collection<T>.Remove(T) dan System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) alih-alih Move(Int32, Int32) akan mengatasi masalah ini. Sebagai alternatif, masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Nilai enum baru di PageRangeSelection WPF
Detail-detail
Dua anggota baru (System.Windows.Controls.PageRangeSelection.CurrentPage dan System.Windows.Controls.PageRangeSelection.SelectedPages) telah ditambahkan ke System.Windows.Controls.PageRangeSelection enum.
Saran
Dalam kebanyakan kasus, perubahan ini tidak akan memengaruhi kode pengguna. Kode yang bergantung pada sejumlah elemen tertentu yang ada dalam panggilan GetNames(Type) atau GetValues(Type) pada jenis System.Windows.Controls.PageRangeSelection harus dimodifikasi.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
PreviewLostKeyboardFocus dipanggil berulang kali jika penangannya menampilkan kotak pesan Windows Forms
Detail-detail
Mulai dari .NET Framework 4.5, pemanggilan MessageBox.Show dari penangan PreviewLostKeyboardFocus akan menyebabkan penangan tersebut diaktifkan kembali saat kotak pesan ditutup, yang berpotensi menghasilkan perulangan kotak pesan tak terbatas.
Saran
Ada dua opsi untuk mengatasi masalah ini:
- Masalah ini dapat dihindari dengan memanggil MessageBox.Show, bukan MessageBox.Show.
- Ini dapat dihindari dengan menampilkan kotak pesan dari penanganan aktivitas LostKeyboardFocus (sebagai lawan dari penanganan aktivitas System.Windows.UIElement.PreviewLostKeyboardFocus).
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- ContentElement.PreviewLostKeyboardFocus
- IInputElement.PreviewLostKeyboardFocus
- UIElement.PreviewLostKeyboardFocus
- UIElement3D.PreviewLostKeyboardFocus
Mengeklik kanan header baris WPF DataGrid akan mengubah pilihan DataGrid
Detail-detail
Mengklik kanan header baris System.Windows.Controls.DataGrid yang telah dipilih saat beberapa baris juga dipilih akan mengubah pilihan System.Windows.Controls.DataGrid menjadi hanya pada baris tersebut.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Menggulir WPF TreeView atau ListBox yang dikelompokkan dalam VirtualizingStackPanel dapat menyebabkan aplikasi berhenti merespons
Detail-detail
Di .NET Framework v4.5, menggulir WPF System.Windows.Controls.TreeView di panel tumpukan virtual dapat menyebabkan aplikasi berhenti merespons jika ada margin di area pandang (di antara item di System.Windows.Controls.TreeView, misalnya, atau di elemen ItemsPresenter). Selain itu, dalam beberapa kasus, item berukuran berbeda dalam tampilan dapat menyebabkan ketidakstabilan meskipun tidak ada margin.
Saran
Bug ini dapat dihindari dengan melakukan peningkatan ke versi .NET Framework 4.5.1. Sebagai alternatif, margin dapat dihapus dari koleksi tampilan (seperti System.Windows.Controls.TreeView) dalam panel tumpukan virtual jika semua item yang ditampung memiliki ukuran yang sama.
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Elemen WPF DataTemplate sekarang terlihat oleh UIA
Detail-detail
Sebelumnya, elemen System.Windows.DataTemplate tidak terlihat oleh Otomasisasi Antarmuka Pengguna. Mulai dari .NET Framework 4.5, UI Automation akan mendeteksi elemen-elemen ini. Hal ini berguna dalam banyak kasus, tetapi dapat merusak pengujian yang bergantung pada pohon UIA yang tidak berisi elemen System.Windows.DataTemplate.
Saran
Pengujian UI Automation untuk aplikasi ini mungkin perlu diperbarui agar memperhitungkan pohon UIA sekarang, termasuk elemen System.Windows.DataTemplate yang sebelumnya tidak terlihat. Misalnya, pengujian yang mengharapkan beberapa elemen berada di samping satu sama lain sekarang mungkin perlu mengharapkan elemen UIA yang sebelumnya tidak terlihat di antaranya. Atau pengujian yang mengandalkan jumlah atau indeks tertentu untuk elemen UIA mungkin perlu diperbarui dengan nilai baru.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Sekarang, DispatcherSynchronizationContext.CreateCopy di WPF mengembalikan salinan baru, bukan instans saat ini.
Detail-detail
Di .NET Framework 4, CreateCopy() mengembalikan referensi ke instans saat ini, terutama sebagai pengoptimalan performa. Di .NET Framework 4.5, instans baru yang dikembalikan memungkinkan untuk pertama kalinya menyimpulkan bahwa referensi yang identik menunjukkan bahwa utas yang dieksekusi berada dalam konteks sinkronisasi yang benar. Ada kemungkinan kecil bahwa kode yang memeriksa identitas referensi ini akan terpengaruh, tetapi karena perubahan tersebut, kode yang memanggil CreateCopy() harus diuji sebagai bagian dari migrasi ke .NET Framework 4.5 atau versi yang lebih baru.
Saran
Perlu diketahui bahwa CreateCopy() sekarang akan mengembalikan objek System.Threading.SynchronizationContext baru. Sebelumnya, kode yang menggunakan ekivalensi referensi yang dilakukan dengan cara ini sebenarnya tidak memeriksa apakah kode tersebut berada dalam konteks yang tepat, namun demikian ketika dikompilasi menggunakan .NET Framework 4.5 atau versi yang lebih baru. Meskipun kemungkinan tidak menyebabkan masalah, menjalankan jalur kode yang terpengaruh harusnya sudah cukup untuk menentukan apakah tindakan ini menimbulkan masalah.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
WPF TextBox secara default memiliki batas pembatalan sebanyak 100
Detail-detail
Dalam .NET Framework 4.5, batas pembatalan default untuk Textbox WPF adalah 100 (bukan tidak terbatas seperti di .NET Framework 4.0)
Saran
Jika batas pembatalan sebanyak 100 terlalu rendah, batas tersebut dapat diatur secara eksplisit dengan UndoLimit
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Teks yang dipilih Kotak Teks WPF muncul dengan warna berbeda ketika kotak teks tidak aktif
Detail-detail
Di .NET Framework 4.5, jika kontrol kotak teks WPF tidak aktif (tidak memiliki fokus), teks yang dipilih di dalam kotak akan muncul dengan warna yang berbeda dengan saat kontrol aktif.
Saran
Perilaku (.NET Framework 4.0) sebelumnya dapat dipulihkan dengan mengatur properti AreInactiveSelectionHighlightBrushKeysSupported ke false.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
WPF TreeViewItem harus digunakan dalam TreeView
Detail-detail
Ada perubahan yang diperkenalkan di .NET Framework 4.5 yang membatasi penggunaan elemen System.Windows.Controls.TreeViewItem di luar System.Windows.Controls.TreeView. Perubahan ini bermanifestasi dalam kondisi berikut:
- Induk visual System.Windows.Controls.TreeViewItem bukan merupakan panel. (System.Windows.Controls.TreeViewItem yang dihasilkan untuk System.Windows.Controls.TreeView akan memiliki panel sebagai induknya)
- System.Windows.Controls.TreeViewItem adalah keturunan dari System.Windows.Controls.VirtualizingStackPanel yang bertindak sebagai "host item" untuk kendali daftar (ListBox, DataGrid, ListView, dll.). Virtualisasi tidak perlu diaktifkan.
-
System.Windows.Controls.VirtualizingStackPanel adalah pengguliran item (
ScrollUnit="Item"). - Seseorang memanggil
VirtualizingStackPanel.MakeVisible(v)untuk menggulir elemenvke tampilan. Hal ini dapat dilakukan secara eksplisit, atau secara implisit dengan beberapa cara; mungkin cara yang paling umum adalah dengan mengeklikvuntuk memberikan fokus keyboard. - Rantai induk visual dari
vke System.Windows.Controls.VirtualizingStackPanel melewati System.Windows.Controls.TreeViewItem.
Dengan kata lain, ini terlihat saat System.Windows.Controls.TreeViewItem digunakan di luar System.Windows.Controls.TreeView, dan pengguna mengklik turunan System.Windows.Controls.TreeViewItem untuk menampilkannya. Jika System.Windows.Controls.TreeViewItem tidak memiliki keturunan yang dapat difokuskan, Anda tidak akan pernah mengalami masalah ini. Contoh dari situasi yang terjadi adalah ketika System.Windows.Controls.TreeViewItem menjadi akar dari DataTemplate. Ketika masalah ini terjadi, muncul InvalidCastException dalam kerangka kerja WPF.
Saran
Perbaikan terbaru akan tersedia untuk ini.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Windows Workflow Foundation (WF)
System.Activities sekarang menjadi APTCA
Detail-detail
Rakitan ditandai dengan atribut System.Security.AllowPartiallyTrustedCallersAttribute.
Saran
Kelas turunan tidak dapat ditandai dengan System.Security.SecurityCriticalAttribute. Sebelumnya, jenis turunan harus ditandai dengan System.Security.SecurityCriticalAttribute. Namun, perubahan ini seharusnya tidak berdampak nyata.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
WF men-serialisasi Expressions.Literal<T> DateTimes dengan cara berbeda sekarang, yang dapat merusak parser XAML khusus.
Detail-detail
Objek ValueSerializer terkait akan mengonversi objek System.DateTime atau System.DateTimeOffset yang komponen Second dan System.DateTime.Millisecond-nya bukan nol dan (untuk nilai System.DateTime) yang memiliki properti Kind tidak Spesifik menjadi sintaks elemen properti, bukan string. Perubahan ini memungkinkan nilai System.DateTime dan System.DateTimeOffset dikonversi bolak-balik tanpa kehilangan data. Pengurai XAML kustom yang menganggap bahwa input XAML dalam sintaksis atribut tidak akan berfungsi dengan benar.
Saran
Perubahan ini memungkinkan nilai System.DateTime dan System.DateTimeOffset dibolak-balik. Pengurai XAML kustom yang menganggap bahwa input XAML dalam sintaksis atribut tidak akan berfungsi dengan benar.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
XML, XSLT
XmlSchemaException sekarang menetapkan posisi baris dengan benar
Detail-detail
Jika nilai SetLineInfo diteruskan ke metode Muat dan terjadi kesalahan validasi, properti LineNumber dan LinePosition sekarang berisi informasi baris.
Saran
Kode penanganan pengecualian yang mengasumsikan LineNumber dan LinePosition tidak akan diatur harus diperbarui karena properti ini sekarang akan diatur dengan benar saat SetLineInfo digunakan saat memuat XML.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Ekspansi entitas XmlTextReader DTD dibatasi hingga 10.000.000 karakter
Detail-detail
Perluasan entitas DTD sekarang dibatasi hingga 10.000.000 karakter. Memuat file XML tanpa perluasan entitas DTD atau dengan perluasan entitas DTD terbatas tidak terpengaruh. File dengan entitas DTD yang diperluas hingga lebih dari 10.000.000 karakter gagal dimuat, dan sekarang memunculkan pengecualian.
Saran
Jika batas perluasan entitas DTD sebesar 10.000.000 terlalu rendah, nilainya dapat diganti dengan properti MaxCharactersFromEntities.
System.Xml.XmlReaderSettings dengan nilai System.Xml.XmlReaderSettings.MaxCharactersFromEntities yang tepat dapat diteruskan ke XmlReader.Create yang mengambil System.Xml.XmlReaderSettings (misalnya
Create(String, XmlReaderSettings))
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- System.Xml.XmlTextReader
- XmlTextReader()
- XmlTextReader(Stream)
- XmlTextReader(Stream, XmlNameTable)
- XmlTextReader(Stream, XmlNodeType, XmlParserContext)
- XmlTextReader(TextReader)
- XmlTextReader(TextReader, XmlNameTable)
- XmlTextReader(String)
- XmlTextReader(String, Stream)
- XmlTextReader(String, Stream, XmlNameTable)
- XmlTextReader(String, TextReader)
- XmlTextReader(String, TextReader, XmlNameTable)
- XmlTextReader(String, XmlNameTable)
- XmlTextReader(String, XmlNodeType, XmlParserContext)
- XmlTextReader(XmlNameTable)
Kompatibilitas ke depan XSLT sekarang berfungsi
Detail-detail
Di .NET Framework 4, kompatibilitas penerusan XSLT 1.0 memiliki masalah berikut:
- Gagal memuatkan lembar gaya jika versinya disetel ke 2.0 dan pengurai menemukan sebuah konstruksi XSLT 1.0 yang tidak dikenal.
- Konstruksi
xsl:sortgagal mengurutkan data jika versi lembar gaya diatur ke 1.1. Di .NET Framework 4.5, masalah ini telah diperbaiki, dan mode kompatibilitas penerusan XSLT 1.0 berfungsi dengan baik.
Saran
Sebagian besar aplikasi seharusnya tidak terpengaruh, namun data akan diurutkan secara berbeda dalam beberapa kasus setelah xsl:sort saat ini diterapkan. Jika xsl:sort digunakan di lembar gaya 1.1, pastikan bahwa aplikasi tidak bergantung pada urutan data yang tidak urut. Jika aplikasi mengandalkan perilaku pengurutan 4.0, hapus xsl:sort dari lembar gaya.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Pesan pengecualian pada lembar gaya XSLT telah diubah
Detail-detail
Di .NET Framework 4.5, teks pesan kesalahan saat file XSLT terlalu kompleks adalah "Lembar gaya terlalu rumit." Di versi sebelumnya, pesan kesalahannya adalah "kesalahan kompilasi XSLT." Kode aplikasi yang bergantung pada teks pesan kesalahan tidak akan berfungsi lagi. Namun, jenis pengecualian tetap sama, jadi perubahan ini seharusnya tidak berdampak nyata.
Saran
Perbarui kode aplikasi apa pun bergantung pada pesan pengecualian dari kondisi kesalahan ini untuk mengharapkan pesan baru, atau (bahkan lebih baik) perbarui kode agar hanya bergantung pada jenis pengecualian (System.Xml.Xsl.XsltException), yang tidak berubah.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- XslCompiledTransform.Load(String)
- XslCompiledTransform.Load(Type)
- XslCompiledTransform.Load(XmlReader)
- XslCompiledTransform.Load(IXPathNavigable)
- XslCompiledTransform.Load(MethodInfo, Byte[], Type[])
- XslCompiledTransform.Load(String, XsltSettings, XmlResolver)
- XslCompiledTransform.Load(XmlReader, XsltSettings, XmlResolver)
- XslCompiledTransform.Load(IXPathNavigable, XsltSettings, XmlResolver)
.NET Framework 4.5.1
ADO.NET
ADO.NET sekarang mencoba menyambungkan kembali koneksi SQL yang rusak secara otomatis
Detail-detail
Dimulai di .NET Framework 4.5.1, .NET Framework akan mencoba menyambungkan kembali koneksi SQL yang rusak secara otomatis. Meskipun pada umumnya hal ini akan menjadikan aplikasi lebih andal, ada kasus saat aplikasi perlu mengetahui bahwa koneksi terputus sehingga aplikasi dapat mengambil beberapa tindakan setelah koneksi ulang.
Saran
Jika fitur ini tidak diinginkan karena masalah kompatibilitas, fitur ini dapat dinonaktifkan dengan menyetel properti System.Data.SqlClient.SqlConnectionStringBuilder.ConnectRetryCount dari string koneksi (atau System.Data.SqlClient.SqlConnectionStringBuilder) ke 0.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- IDbConnection.ConnectionString
- SqlConnection.ConnectionString
- ConnectionStringSettings.ConnectionString
- DbConnection.ConnectionString
- DbConnectionStringBuilder.ConnectionString
- SqlConnectionStringBuilder()
- SqlConnectionStringBuilder(String)
- DbConnectionStringBuilder()
- DbConnectionStringBuilder(Boolean)
Inti
ConcurrentDictionary yang telah diserialisasi di .NET Framework 4.5 menggunakan NetDataContractSerializer tidak dapat dideserialisasi oleh .NET Framework 4.5.1 atau 4.5.2
Detail-detail
Karena perubahan internal pada jenis tersebut, objek ConcurrentDictionary<TKey,TValue> yang diserialisasi dengan .NET Framework 4.5 dengan menggunakan System.Runtime.Serialization.NetDataContractSerializer tidak dapat dideserialisasi di .NET Framework 4.5.1 atau di .NET Framework 4.5.2. Perlu diperhatikan bahwa kebalikan dari upaya ini (serialisasi dengan .NET Framework 4.5.x dan deserialisasi dengan .NET Framework 4.5) dapat dilakukan. Demikian pula, semua serialisasi lintas versi 4.x berfungsi dengan .NET Framework 4.6. Serialisasi dan deserialisasi dengan satu versi .NET Framework tidak terpengaruh.
Saran
Jika perlu untuk menserialisasikan dan mendeserialisasi System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> antara .NET Framework 4.5 dan .NET Framework 4.5.1/4.5.2, serializer yang berbeda seperti System.Runtime.Serialization.DataContractSerializer harus digunakan alih-alih System.Runtime.Serialization.NetDataContractSerializer. Atau, karena masalah ini dibahas dalam .NET Framework 4.6, masalah ini dapat diselesaikan dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
ConcurrentQueue<T>.TryPeek dapat mengembalikan null yang salah melalui parameter out-nya
Detail-detail
Dalam beberapa skenario multi-utas, System.Collections.Concurrent.ConcurrentQueue<T>.TryPeek(T) dapat mengembalikan true, tetapi mengisi parameter keluar dengan nilai null (bukan nilai yang benar dan diintip).
Saran
Masalah ini diperbaiki di .NET Framework 4.5.1. Meng-upgrade ke Framework tersebut dapat menyelesaikan masalah.
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
COR_PRF_GC_ROOT_HANDLEs tidak didaftar oleh profiler.
Detail-detail
Di .NET Framework v4.5.1, API profil RootReferences2() tidak pernah mengembalikan COR_PRF_GC_ROOT_HANDLE secara salah (sebagai gantinya, ia dikembalikan sebagai COR_PRF_GC_ROOT_OTHER). Masalah ini diperbaiki mulai dari .NET Framework 4.6.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.6 dan dapat diatasi dengan meningkatkan ke versi .NET Framework tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Deserialisasi objek di seluruh domain aplikasi bisa gagal
Detail-detail
Dalam beberapa kasus, ketika aplikasi menggunakan dua atau beberapa domain aplikasi dengan basis aplikasi yang berbeda, mencoba melakukan deserialisasi objek dalam konteks panggilan logis di seluruh domain aplikasi akan melemparkan pengecualian.
Saran
Lihat Mitigasi: Deserialisasi Objek di Seluruh Domain Aplikasi
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
EventListener memotong potongan string yang mengandung karakter null tersemat
Detail-detail
System.Diagnostics.Tracing.EventListener memangkas string dengan null tersemat. Karakter null tidak didukung oleh kelas System.Diagnostics.Tracing.EventSource. Perubahan ini hanya akan memengaruhi aplikasi yang menggunakan System.Diagnostics.Tracing.EventListener untuk membaca data System.Diagnostics.Tracing.EventSource dalam proses dan aplikasi yang menggunakan karakter null sebagai pemisah.
Saran
Jika memungkinkan, data System.Diagnostics.Tracing.EventSource harus diperbarui agar tidak menggunakan karakter null yang disematkan.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- EventListener()
- EventListener.EnableEvents(EventSource, EventLevel)
- EventListener.EnableEvents(EventSource, EventLevel, EventKeywords)
- EventListener.EnableEvents(EventSource, EventLevel, EventKeywords, IDictionary<String,String>)
EventSource.WriteEvent impls harus meneruskan kepada WriteEvent parameter yang sama seperti yang diterimanya (plus ID)
Detail-detail
Runtime kini memberlakukan kontrak yang menentukan hal berikut: Kelas yang diturunkan dari System.Diagnostics.Tracing.EventSource, yang mendefinisikan metode acara ETW, harus memanggil metode kelas dasar EventSource.WriteEvent dengan ID acara diikuti oleh argumen yang sama seperti yang diteruskan ke metode acara ETW.
Saran
Pengecualian System.IndexOutOfRangeException akan dilemparkan jika System.Diagnostics.Tracing.EventListener membaca data System.Diagnostics.Tracing.EventSource dalam proses sumber kejadian yang melanggar kontrak ini.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Muatan berlebih Marshal.SizeOf dan Marshal.PtrToStructure memutuskan kode dinamis
Detail-detail
Mulai dari .NET Framework 4.5.1, pengikatan secara dinamis ke metode SizeOf<T>(), SizeOf<T>(T), PtrToStructure(IntPtr, Object), PtrToStructure(IntPtr, Type), PtrToStructure<T>(IntPtr), atau PtrToStructure<T>(IntPtr, T) (misalnya melalui Windows PowerShell, IronPython, atau kata kunci dinamis C#) dapat menghasilkan MethodInvocationExceptions karena kelebihan beban baru dari metode ini telah ditambahkan yang mungkin ambigu bagi mesin skrip.
Saran
Perbarui skrip untuk menunjukkan dengan jelas kelebihan beban mana yang harus digunakan. Pembaruan ini biasanya dapat dilakukan dengan mengubah tipe parameter metode secara eksplisit sebagai Type. Lihat tautan ini untuk detail selengkapnya dan contoh cara mengatasi masalah tersebut.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Beberapa API .NET menyebabkan pengecualian EntryPointNotFoundExceptions (tertangani) pada kesempatan pertama
Detail-detail
Di .NET Framework 4.5, sejumlah kecil metode .NET mulai melontarkan "first chance" System.EntryPointNotFoundException. Pengecualian ini ditangani dalam .NET Framework, tetapi dapat mengganggu otomatisasi pengujian yang tidak mengharapkan pengecualian temuan awal. API yang sama ini memutuskan beberapa skenario ApiVerifier saat HighVersionLie diaktifkan.
Saran
Bug ini dapat dihindari dengan melakukan peningkatan ke versi .NET Framework 4.5.1. Atau, otomatisasi pengujian dapat diperbarui untuk tidak melanggar pengecualian kesempatan System.EntryPointNotFoundException pertama.
| Nilai | |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- Debug.Assert(Boolean)
- Debug.Assert(Boolean, String)
- Debug.Assert(Boolean, String, String)
- Debug.Assert(Boolean, String, String, Object[])
- XmlSerializer(Type)
Adapter aliran WinRT tidak lagi memanggil FlushAsync secara otomatis saat ditutup
Detail-detail
Di aplikasi Windows Store, adapter aliran Runtime Windows tidak lagi memanggil metode FlushAsync dari metode Dispose.
Saran
Perubahan ini harusnya bersifat transparan. Pengembang dapat mengembalikan perilaku sebelumnya dengan menulis kode seperti ini:
using (var stream = GetWindowsRuntimeStream() as Stream)
{
// do something
await stream.FlushAsync();
}
| Nama | Nilai |
|---|---|
| Cakupan | Transparan |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Data Informasi
ADO.NET sekarang mencoba menyambungkan kembali koneksi SQL yang rusak secara otomatis
Detail-detail
Dimulai di .NET Framework 4.5.1, .NET Framework akan mencoba menyambungkan kembali koneksi SQL yang rusak secara otomatis. Meskipun pada umumnya hal ini akan menjadikan aplikasi lebih andal, ada kasus saat aplikasi perlu mengetahui bahwa koneksi terputus sehingga aplikasi dapat mengambil beberapa tindakan setelah koneksi ulang.
Saran
Jika fitur ini tidak diinginkan karena masalah kompatibilitas, fitur ini dapat dinonaktifkan dengan menyetel properti System.Data.SqlClient.SqlConnectionStringBuilder.ConnectRetryCount dari string koneksi (atau System.Data.SqlClient.SqlConnectionStringBuilder) ke 0.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
- IDbConnection.ConnectionString
- SqlConnection.ConnectionString
- ConnectionStringSettings.ConnectionString
- DbConnection.ConnectionString
- DbConnectionStringBuilder.ConnectionString
- SqlConnectionStringBuilder()
- SqlConnectionStringBuilder(String)
- DbConnectionStringBuilder()
- DbConnectionStringBuilder(Boolean)
Serialisasi
NetDataContractSerializer gagal mendeserialisasi ConcurrentDictionary yang disimpan dalam format serial dengan versi .NET yang berbeda.
Detail-detail
System.Runtime.Serialization.NetDataContractSerializer memang dirancang agar hanya dapat digunakan jika akhir serialisasi dan deserialisasi memiliki jenis CLR yang sama. Oleh karena itu, tidak ada jaminan bahwa objek yang diserialisasi dengan satu versi .NET Framework dapat dideserialisasi dengan versi yang berbeda.System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> adalah jenis yang dikenal tidak akan dideserialisasi dengan benar jika diserialisasi dengan .NET Framework 4.5 atau versi yang lebih lama, dan jika dideserialisasi dengan .NET Framework 4.5.1 atau versi yang lebih baru.
Saran
Ada beberapa kemungkinan solusi untuk masalah ini:
- Tingkatkan juga komputer serialisasi untuk menggunakan .NET Framework 4.5.1.
- Gunakan System.Runtime.Serialization.DataContractSerializer, bukan System.Runtime.Serialization.NetDataContractSerializer karena ini tidak mengharapkan jenis CLR yang sama persis pada kedua proses serialisasi dan deserialisasi.
- Gunakan System.Collections.Generic.Dictionary<TKey,TValue> dan bukan System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> karena tidak memperlihatkan penghentian khusus ini pada 4.5->4.5.1.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Windows Communication Foundation (WCF)
MinFreeMemoryPercentageToActiveService kini dipatuhi
Detail-detail
Pengaturan ini menetapkan memori minimum yang harus tersedia di server sebelum layanan WCF dapat diaktifkan. Pengaturan ini dirancang untuk mencegah pengecualian System.OutOfMemoryException. Di .NET Framework 4.5, pengaturan ini tidak memiliki dampak apa pun. Pada .NET Framework 4.5.1, pengaturan dipatuhi.
Saran
Pengecualian terjadi jika memori bebas yang tersedia di server web kurang dari persentase yang ditentukan oleh pengaturan konfigurasi. Beberapa layanan WCF yang berhasil dimulai dan berjalan di lingkungan memori yang terbatas sekarang mungkin gagal.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.1 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Windows Presentation Foundation (WPF)
Menggulir WPF TreeView atau ListBox yang dikelompokkan dalam VirtualizingStackPanel dapat menyebabkan aplikasi berhenti merespons
Detail-detail
Di .NET Framework v4.5, menggulir WPF System.Windows.Controls.TreeView di panel tumpukan virtual dapat menyebabkan aplikasi berhenti merespons jika ada margin di area pandang (di antara item di System.Windows.Controls.TreeView, misalnya, atau di elemen ItemsPresenter). Selain itu, dalam beberapa kasus, item berukuran berbeda dalam tampilan dapat menyebabkan ketidakstabilan meskipun tidak ada margin.
Saran
Bug ini dapat dihindari dengan melakukan peningkatan ke versi .NET Framework 4.5.1. Sebagai alternatif, margin dapat dihapus dari koleksi tampilan (seperti System.Windows.Controls.TreeView) dalam panel tumpukan virtual jika semua item yang ditampung memiliki ukuran yang sama.
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
.NET Framework 4.5.2
ASP.NET
ASP.NET MVC kini menghindari spasi dalam string yang diteruskan melalui parameter rute
Detail-detail
Untuk menyesuaikan dengan RFC 2396, kini, spasi di jalur rute di-escape saat mengisi parameter tindakan dari rute. Jadi, walaupun /controller/action/some data sebelumnya akan cocok dengan rute /controller/action/{data} dan menyediakan some data sebagai parameter data, kini sebagai gantinya some%20data akan disediakan.
Saran
Kode harus diperbarui untuk menghapus escape pada parameter string dari rute. Jika URI asli diperlukan, URI tersebut dapat diakses dengan API RequestUri.OriginalString.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.2 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak lagi dapat mengatur EnableViewStateMac ke false
Detail-detail
ASP.NET tidak lagi mengizinkan pengembang untuk menentukan <pages enableViewStateMac="false"/> atau <@Page EnableViewStateMac="false" %>. Kode autentikasi pesan status tampilan (MAC) sekarang diberlakukan untuk semua permintaan yang menyematkan status tampilan. Hanya aplikasi yang secara eksplisit mengatur properti EnableViewStateMac ke false yang terpengaruh.
Saran
EnableViewStateMac harus diasumsikan menjadi true, dan kesalahan MAC yang dihasilkan harus diselesaikan (seperti yang dijelaskan dalam panduan ini, yang berisi beberapa resolusi tergantung kondisi tertentu yang menyebabkan kesalahan MAC).
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5.2 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Pembuatan profil aplikasi ASP.NET MVC4 dapat menyebabkan Kesalahan Mesin Eksekusi Fatal
Detail-detail
Profiler yang menggunakan assembly NGEN /Profile dapat menyebabkan crash pada aplikasi ASP.NET MVC4 saat memulai dengan 'Pengecualian Mesin Eksekusi Fatal'
Saran
Masalah ini diperbaiki di .NET Framework 4.5.2. Sebagai alternatif, profiler dapat menghindari masalah ini dengan menentukan COR_PRF_DISABLE_ALL_NGEN_IMAGES dalam masker kejadiannya.
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Data Informasi
SqlConnection.Open gagal pada Windows 7 dengan keberadaan LSP atau BSP Winsock non-IFS
Detail-detail
Open() dan OpenAsync(CancellationToken) gagal di .NET Framework 4.5 jika berjalan di komputer Windows 7 dengan adanya LSP atau BPS Winsock non-IFS di komputer. Untuk menentukan apakah LSP atau BSP non-IFS diinstal, gunakan perintah netsh WinSock Show Catalog, dan periksa setiap item Winsock Catalog Provider Entry yang dikembalikan. Jika nilai Bendera Layanan memiliki bit 0x20000 yang diatur, penyedia menggunakan handle IFS dan akan berfungsi dengan benar. Jika 0x20000 bit sudah jelas (tidak diatur), berarti ini adalah LSP atau BSP non-IFS.
Saran
Bug ini telah diperbaiki di .NET Framework 4.5.2, sehingga dapat dihindari dengan meningkatkan versi .NET Framework. Atau, hal ini dapat dihindari dengan menghapus LSP Winsock non-IFS yang terinstal.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Kerangka Kerja Entitas
EF tidak lagi melempar pengecualian untuk QueryViews dengan karakteristik tertentu
Detail-detail
Entity Framework tidak lagi melemparkan System.StackOverflowException pengecualian saat aplikasi menjalankan kueri yang melibatkan QueryView dengan properti navigasi 0..1 yang mencoba menyertakan entitas terkait sebagai bagian dari kueri. Misalnya, dengan memanggil .Include(e => e.RelatedNavProp).
Saran
Perubahan ini hanya memengaruhi kode yang menggunakan QueryViews dengan hubungan 1-0..1 saat menjalankan kueri yang memanggil .Include. Perubahan ini akan meningkatkan keandalan dan akan menjadi transparan untuk hampir semua aplikasi. Namun, jika perubahan tersebut menyebabkan perilaku yang tidak terduga, Anda dapat menonaktifkannya dengan menambahkan entri berikut ke bagian <appSettings> dalam file konfigurasi aplikasi:
<add key="EntityFramework_SimplifyUserSpecifiedViews" value="false" />
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5.2 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Penghentian keikutsertaan untuk kembali dari generasi 4.5 SQL yang berbeda ke generasi 4.0 SQL yang lebih sederhana
Detail-detail
Kueri yang menghasilkan pernyataan JOIN dan berisi panggilan ke operasi pembatasan tanpa terlebih dahulu menggunakan OrderBy sekarang menghasilkan SQL yang lebih sederhana. Setelah ditingkatkan ke versi .NET Framework 4.5, kueri ini menghasilkan SQL yang lebih rumit daripada versi sebelumnya.
Saran
Fitur ini dinonaktifkan secara default. Jika Entity Framework menghasilkan pernyataan JOIN tambahan yang menyebabkan penurunan kinerja, Anda dapat mengaktifkan fitur ini dengan menambahkan entri berikut ke bagian <appSettings> dari file konfigurasi aplikasi (app.config):
<add key="EntityFramework_SimplifyLimitOperations" value="true" />
| Nama | Nilai |
|---|---|
| Cakupan | Transparan |
| Versi | 4.5.2 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
Windows Presentation Foundation (WPF)
Memanggil DataGrid.CommitEdit dari pengendali CellEditEnding dapat menyebabkan fokus hilang
Detail-detail
Memanggil CommitEdit() dari salah satu penanganan peristiwa System.Windows.Controls.DataGridSystem.Windows.Controls.DataGrid.CellEditEnding menyebabkan System.Windows.Controls.DataGrid kehilangan fokus.
Saran
Bug ini telah diperbaiki di .NET Framework 4.5.2, sehingga dapat dihindari dengan meningkatkan versi .NET Framework. Sebagai alternatif, ini dapat dihindari dengan secara eksplisit memilih ulang System.Windows.Controls.DataGrid setelah memanggil System.Windows.Controls.DataGrid.CommitEdit().
| Nama | Nilai |
|---|---|
| Cakupan | Edge |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Secara intermiten, tidak bisa menggulir ke item paling bawah di ItemsControls (seperti ListBox dan DataGrid) saat menggunakan Template Data kustom
Detail-detail
Dalam beberapa kasus, bug pada .NET Framework 4.5 menyebabkan ItemsControls (seperti System.Windows.Controls.ListBox, System.Windows.Controls.ComboBox, System.Windows.Controls.DataGrid, dll.) tidak bergulir ke item paling bawah saat menggunakan DataTemplates kustom. Jika pengguliran diupayakan kedua kalinya (setelah menggulir kembali ke atas), maka ini akan berfungsi.
Saran
Masalah ini telah diperbaiki di .NET Framework 4.5.2 dan dapat diatasi dengan meningkatkan .NET Framework ke versi tersebut (atau versi yang lebih baru). Sebagai alternatif, pengguna masih dapat menarik bilah gulir ke item akhir dalam koleksi ini, tetapi mungkin perlu mencoba dua kali agar berhasil melakukannya.
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
WPF menghasilkan proses wisptis.exe yang dapat membekukan mouse
Detail-detail
Masalah diperkenalkan di 4.5.2 yang menyebabkan wisptis.exe muncul yang dapat membekukan input mouse.
Saran
Perbaikan untuk masalah ini tersedia dalam rilis layanan .NET Framework 4.5.2 (hotfix rollup 3026376), atau dengan meningkatkan ke .NET Framework 4.6
| Nama | Nilai |
|---|---|
| Cakupan | Utama |
| Versi | 4.5.2 |
| Jenis | Waktu Operasi |
API yang Terpengaruh
Tidak terdeteksi melalui analisis API.
XML
Perubahan penguraian XML
| Nama | Nilai |
|---|---|
| Cakupan | Kecil |
| Versi | 4.5.2 |
| Jenis | Waktu Operasi |
Detail-detail
Karena alasan keamanan, perubahan berikut diperkenalkan ke APIS penguraian XML:
- XmlReaderSettings.MaxCharactersFromEntities diatur ke 10 juta saat XmlReaderSettings diinisialisasi.
-
XmlReaderSettings.XmlResolver diatur ke
nullsecara default.
Catatan
XmlReaderSettings digunakan oleh semua pengurai XML, jadi sementara perubahan ini membantu kasus XmlReader, perubahan ini juga turut membantu skenario yang lain.
Saran
Untuk kembali ke perilaku sebelumnya, Anda dapat menetapkan nilai di registri. Tambahkan nilai DWORD bernama EnableLegacyXmlSettings ke kunci registri HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\XML, dan atur nilainya ke 1. Sebagai alternatif, Anda juga dapat menambahkan nilai registri di sarang HKEY_CURRENT_USER.
API yang Terpengaruh
Selain itu, API XML apa pun yang bergantung pada XmlResolver, baik secara langsung atau tidak langsung, akan terpengaruh.