Perubahan runtime untuk migrasi ke .NET Framework 4.5.x

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

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

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 =&gt; b.IsCompleted) untuk mendeteksi kondisi tersebut.

Nama Nilai
Cakupan Kecil
Versi 4.5
Jenis Waktu Operasi

API yang Terpengaruh

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

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

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

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

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:

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 mengembalikan false.
  • 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 DATABASE secara langsung, bukan memanggil DeleteDatabase jika DatabaseExists mengembalikan true. 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

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

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

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

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

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

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:

Nama Nilai
Cakupan Edge
Versi 4.5
Jenis Waktu Operasi

API yang Terpengaruh

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:

Nama Nilai
Cakupan Edge
Versi 4.5
Jenis Waktu Operasi

API yang Terpengaruh

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:

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

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:sort gagal 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

.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

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

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

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

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:

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=&quot;false&quot;/> atau <@Page EnableViewStateMac=&quot;false&quot; %>. 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 =&gt; 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:

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.