Bagikan melalui


Masalah migrasi .NET Framework 4

Artikel ini menjelaskan masalah migrasi antara .NET Framework versi 3.5 Paket Layanan 1 dan .NET Framework versi 4, termasuk perbaikan, perubahan untuk kepatuhan dan keamanan standar, dan perubahan berdasarkan umpan balik pelanggan. Sebagian besar perubahan ini tidak memerlukan modifikasi pemrograman dalam aplikasi Anda. Untuk mereka yang mungkin melibatkan perubahan, lihat kolom Perubahan yang disarankan pada tabel. Perubahan penting dipecah berdasarkan area, misalnya, ASP.NET dan Windows Presentation Foundation (WPF).

Untuk gambaran umum tingkat yang lebih tinggi tentang masalah dalam artikel ini, lihat Panduan Migrasi ke .NET Framework 4.

Untuk informasi tentang fitur baru, lihat Yang Baru di .NET Framework 4.

ASP.NET dan Web

Namespace: System.Web, System.Web.Mobile, System.Web.Security, System.Web.UI.WebControls

Perakitan: System.Web (di System.Web.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
File definisi browser File definisi browser telah diperbarui untuk menyertakan informasi tentang browser dan perangkat baru dan yang diperbarui. Browser dan perangkat yang lebih lama seperti Netscape Navigator telah dihapus, dan browser serta perangkat yang lebih baru seperti Google Chrome dan Apple iPhone telah ditambahkan.

Jika aplikasi Anda berisi definisi browser kustom yang diturunkan dari salah satu definisi browser yang telah dihapus, Anda akan melihat kesalahan.

Objek HttpBrowserCapabilities (yang diperlihatkan oleh properti Request.Browse halaman) didorong oleh file definisi browser. Oleh karena itu, informasi yang dikembalikan dengan mengakses properti objek ini di ASP.NET 4 mungkin berbeda dari informasi yang dikembalikan di versi ASP.NET yang lama.
Jika aplikasi Anda bergantung pada file definisi browser lama, Anda dapat menyalinnya dari folder berikut:

Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers

Salin file ke folder \CONFIG\Browsers yang sesuai untuk ASP.NET 4. Setelah Anda menyalin file, jalankan alat baris perintah Aspnet_regbrowsers.exe. Untuk informasi lebih lanjut, lihat https://www.asp.net/mobile situs Web.
Aplikasi turunan berjalan di bawah versi campuran ASP.NET Aplikasi ASP.NET 4 yang dikonfigurasi sebagai turunan dari aplikasi yang menjalankan versi ASP.NET yang lebih lama mungkin gagal untuk memulai karena kesalahan konfigurasi atau kompilasi. Kesalahan spesifik yang terjadi tergantung pada apakah aplikasi berjalan di bawah IIS 6.0, atau di bawah IIS 7 atau IIS 7.5. Anda dapat membuat perubahan pada file konfigurasi aplikasi yang terpengaruh sehingga sistem konfigurasi mengenali aplikasi ASP.NET 4 dengan benar. Untuk informasi tentang perubahan yang harus Anda buat, lihat bagian "Aplikasi Turunan ASP.NET 4 Gagal Memulai Saat Menggunakan Aplikasi ASP.NET 2.0 atau ASP.NET 3.5" dalam dokumen ASP.NET 4 Melanggar Perubahan di situs web ASP.NET.
Perubahan ClientID Pengaturan clientIDMode baru di ASP.NET 4 memungkinkan Anda menentukan bagaimana ASP.NET menghasilkan atribut id untuk elemen HTML. Di versi ASP.NET sebelumnya, perilaku default setara dengan pengaturan AutoID dari clientIDMode. Pengaturan default sekarang adalah Predictable. Untuk informasi lebih lanjut, lihat Identifikasi Kontrol Server Web ASP.NET. Jika Anda menggunakan Visual Studio untuk meningkatkan aplikasi Anda dari ASP.NET 2.0 atau ASP.NET 3.5, alat secara otomatis menambahkan pengaturan ke file Web.config yang mempertahankan perilaku versi .NET Framework yang sebelumnya. Namun, jika Anda meningkatkan aplikasi dengan mengubah kumpulan aplikasi di IIS untuk menargetkan .NET Framework 4, ASP.NET menggunakan mode baru secara default. Untuk menonaktifkan mode ID klien baru, tambahkan pengaturan berikut ke file Web.config:

<pages clientIDMode="AutoID" />
Keamanan akses kode (CAS) Fitur ASP.NET 2.0 NET yang ditambahkan di ASP.NET 3.5 menggunakan model keamanan kode akses (CAS) .NET Framework 1.1 dan .NET Framework 2.0. Namun, implementasi CAS di ASP.NET 4 telah dirombak secara substansial. Akibatnya, aplikasi ASP.NET kepercayaan parsial yang mengandalkan kode tepercaya yang berjalan di singgahan perakitan global mungkin gagal dengan berbagai pengecualian keamanan. Aplikasi kepercayaan sebagian yang mengandalkan modifikasi ekstensif pada kebijakan CAS mesin mungkin juga gagal dan menimbulkan pengecualian keamanan. Anda dapat mengembalikan aplikasi ASP.NET 4 kepercayaan parsial ke perilaku ASP.NET 1.1 dan 2.0 dengan menggunakan atribut legacyCasModel baru di elemen konfigurasi trust, seperti yang diperlihatkan dalam contoh berikut:

<trust level= "Medium" legacyCasModel="true" />

Penting: Mengembalikan ke model CAS yang sebelumnya mungkin menunjukkan penurunan keamanan.

Untuk informasi selengkapnya tentang model keamanan akses kode ASP.NET 4 yang baru, lihat Keamanan Akses Kode di Aplikasi ASP.NET 4.
File konfigurasi File konfigurasi akar (file machine.config dan file Web.config akar) untuk .NET Framework dan ASP.NET 4 telah diperbarui untuk menyertakan sebagian besar informasi konfigurasi boilerplate yang ditemukan di file Web.config aplikasi di ASP .NET 3.5. Karena kompleksitas sistem konfigurasi IIS 7 dan IIS 7.5 yang dikelola, menjalankan aplikasi ASP.NET 3.5 di bawah ASP.NET 4 dan di bawah IIS 7 dan IIS 7.5 dapat mengakibatkan kesalahan ASP.NET atau kesalahan IIS. Tingkatkan aplikasi ASP.NET 3.5 ke ASP.NET 4 dengan menggunakan alat peningkatan proyek di Visual Studio. Visual Studio 2010 secara otomatis memodifikasi file Web.config aplikasi ASP.NET 3.5 berisi pengaturan yang sesuai untuk ASP.NET 4.

Namun, Anda dapat menjalankan aplikasi ASP.NET 3.5 menggunakan .NET Framework 4 tanpa kompilasi ulang. Dalam hal ini, Anda mungkin harus memodifikasi file Web.config aplikasi secara manual sebelum menjalankan aplikasi di bawah .NET Framework 4 dan di bawah IIS 7 atau IIS 7.5. Perubahan spesifik yang harus Anda buat bergantung pada kombinasi perangkat lunak yang Anda gunakan, termasuk rilis Paket Layanan (SP). Untuk informasi tentang kemungkinan kombinasi perangkat lunak yang terpengaruh oleh perubahan ini dan cara mengatasi masalah dengan kombinasi tertentu, lihat bagian "Kesalahan Konfigurasi Terkait dengan Konfigurasi Akar ASP.NET 4 Baru" dalam dokumen ASP.NET 4 Melanggar Perubahan di situs Web ASP.NET.
Perenderan kontrol Di versi ASP.NET sebelumnya, beberapa kontrol memancarkan markup yang tidak dapat Anda nonaktifkan. Secara default, jenis markup ini tidak lagi dibuat di ASP.NET 4. Perubahan perenderan memengaruhi kontrol berikut:

* Kontrol Image dan ImageButton tidak lagi merender atribut border="0".
* Kelas BaseValidator dan kontrol validasi yang diturunkan darinya tidak lagi membuat teks merah secara default.
* Kontrol HtmlForm tidak merender atribut name.
* Kontrol Table tidak lagi merender atribut border="0".

Kontrol yang tidak dirancang untuk input pengguna (misalnya, kontrol Label) tidak lagi merender atribut disabled="disabled" jika properti Enabled mereka diatur ke false (atau jika mereka mewarisi pengaturan ini dari kontrol kontainer).
Jika Anda menggunakan Visual Studio untuk meningkatkan aplikasi Anda dari ASP.NET 2.0 atau ASP.NET 3.5, alat secara otomatis menambahkan pengaturan ke file Web.config yang mempertahankan perenderan warisan. Namun, jika Anda meningkatkan aplikasi dengan mengubah kumpulan aplikasi di IIS untuk menargetkan .NET Framework 4, ASP.NET menggunakan mode perenderan baru secara default. Untuk menonaktifkan mode perenderan baru, tambahkan pengaturan berikut ke file Web.config:

<pages controlRenderingCompatibilityVersion="3.5" />
Penangan aktivitas dalam dokumen default ASP.NET 4 merender nilai atribut action elemen form HTML sebagai string kosong saat permintaan dibuat ke URL tanpa ekstensi yang memiliki dokumen default yang dipetakan ke sana. Dalam rilis ASP.NET sebelumnya, permintaan ke http://contoso.com akan menghasilkan permintaan ke Default.aspx. Dalam dokumen tersebut, tag form pembuka akan ditampilkan seperti pada contoh berikut:

<form action="Default.aspx" />

Di ASP.NET 4, permintaan ke http://contoso.com juga menghasilkan permintaan ke Default.aspx, tetapi ASP.NET sekarang merender tag form pembuka HTML seperti dalam contoh berikut:

<form action="" />

Ketika atribut action adalah string kosong, objek DefaultDocumentModule IIS membuat permintaan turunan ke Default.aspx. Di sebagian besar kondisi, permintaan turunan ini transparan untuk kode aplikasi, dan halaman Default.aspx berjalan normal. Namun, interaksi potensial antara kode terkelola dan mode terintegrasi IIS 7 atau IIS 7.5 dapat menyebabkan halaman .aspx terkelola berhenti bekerja dengan benar selama permintaan turunan. Jika kondisi berikut terjadi, permintaan turunan ke dokumen .aspx default akan mengakibatkan kesalahan atau perilaku yang tidak terduga:

* Halaman .aspx dikirim ke browser dengan atribut action elemen form diatur ke "".
* Formulir dikirim kembali ke ASP.NET.
* Modul HTTP terkelola membaca beberapa bagian dari isi entitas, seperti Request.Form atau Request.Params. Hal ini menyebabkan isi entitas permintaan POST dibaca ke dalam memori terkelola. Akibatnya, isi entitas tidak lagi tersedia untuk modul kode asli apa pun yang berjalan dalam mode terintegrasi IIS 7 atau IIS 7.5.
* Objek DefaultDocumentModule IIS akhirnya berjalan dan membuat permintaan turunan ke dokumen Default.aspx. Namun, karena isi entitas telah dibaca oleh sepotong kode terkelola, tidak ada isi entitas yang tersedia untuk dikirim ke permintaan turunan.
* Ketika alur HTTP berjalan untuk permintaan turunan, handler untuk file .aspx berjalan selama fase handler-execute.

Karena tidak ada isi entitas, tidak ada variabel formulir dan tidak ada status tampilan. Oleh karena itu tidak ada informasi yang tersedia untuk pengendali halaman .aspx untuk menentukan peristiwa apa (jika ada) yang harus dimunculkan. Akibatnya, tidak ada penanganan aktivitas postback untuk halaman .aspx yang terpengaruh berjalan.
Untuk informasi tentang cara mengatasi masalah yang mungkin muncul sebagai akibat dari perubahan ini, lihat "Penanganan Aktivitas Mungkin Tidak Dimunculkan dalam Dokumen Default dalam Mode Terintegrasi IIS 7 atau IIS 7.5" dalam dokumen ASP.NET 4 Melanggar Perubahan di situs Web ASP.NET.
Algoritme hash ASP.NET menggunakan enkripsi dan algoritme hash untuk membantu mengamankan data seperti cookie autentikasi formulir dan status tampilan. Secara default, ASP.NET 4 menggunakan algoritma HMACSHA256 untuk operasi hash pada cookie dan status tampilan. Versi ASP.NET sebelumnya menggunakan algoritma HMACSHA1 yang sebelumnya. Jika Anda menjalankan aplikasi yang menggabungkan ASP.NET 2.0 dan ASP.NET 4, di mana data seperti cookie autentikasi formulir harus bekerja di seluruh versi .NET Framework, konfigurasikan aplikasi Web ASP.NET 4 untuk menggunakan algoritma HMACSHA1 yang sebelumnya dengan menambahkan pengaturan berikut di file Web.config:

<machineKey validation="SHA1" />
Kontrol hosting di Internet Explorer Anda tidak dapat lagi menghosting kontrol Formulir Windows di Internet Explorer, karena ada solusi yang lebih baik untuk kontrol hosting di Web. Oleh karena itu, rakitan IEHost.dll dan IEExec.exe telah dihapus dari .NET Framework. Anda dapat menggunakan teknologi berikut untuk pengembangan kontrol kustom di aplikasi Web:

* Anda dapat membuat aplikasi Silverlight dan mengkonfigurasinya untuk berjalan di luar browser. Untuk informasi selengkapnya, lihat Dukungan Di Luar Browser.
* Anda dapat membuat aplikasi browser XAML (XBAP) untuk memanfaatkan kemampuan WPF (memerlukan .NET Framework pada mesin klien). Untuk informasi selengkapnya, lihat Gambaran umum Aplikasi browser WPF XAML.
Metode HtmlEncode dan UrlEncode Metode HtmlEncode dan UrlEncode dari kelas HttpUtility dan HttpServerUtility telah diperbarui untuk mengodekan karakter tanda kutip tunggal (') sebagai berikut:

* Metode HtmlEncode mengodekan instans tanda kutip tunggal sebagai &#39;
* Metode UrlEncode mengodekan instans tanda kutip tunggal sebagai %27
Periksa kode Anda untuk tempat di mana Anda menggunakan metode HtmlEncode dan UrlEncode, dan pastikan bahwa perubahan dalam pengodean tidak menghasilkan perubahan yang akan memengaruhi aplikasi Anda.
Kesalahan HttpException di aplikasi ASP.NET 2.0 Setelah ASP.NET 4 telah diaktifkan di IIS 6, aplikasi ASP.NET 2.0 yang berjalan di IIS 6 (di Windows Server 2003 atau Windows Server 2003 R2) mungkin menghasilkan kesalahan seperti berikut ini: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. * Jika ASP.NET 4 tidak diperlukan untuk menjalankan situs Web, petakan ulang situs tersebut untuk menggunakan ASP.NET 2.0.

-atau-

* Jika ASP.NET 4 diperlukan untuk menjalankan situs Web, pindahkan direktori virtual ASP.NET 2.0 turunan ke situs Web berbeda yang dipetakan ke ASP.NET 2.0.

-atau-

* Nonaktifkan URL tanpa ekstensi. Untuk informasi lebih lanjut, lihat "Aplikasi ASP.NET 2.0 Mungkin Menghasilkan Kesalahan HttpException yang mereferensikan eurl.axd" dalam dokumen ASP.NET 4 Melanggar Kesalahan di situs Web ASP.NET.
Jenis keanggotaan Beberapa jenis (misalnya, MembershipProvider) yang digunakan dalam keanggotaan ASP.NET telah dipindahkan dari System.Web.dll ke rakitan System.Web.ApplicationServices.dll. Jenis dipindahkan untuk menyelesaikan dependensi lapisan arsitektur antara jenis di klien dan di diperpanjang .NET Framework SKU. Pustaka kelas yang telah ditingkatkan dari versi ASP.NET yang sebelumnya dan yang menggunakan jenis keanggotaan yang telah dipindahkan mungkin gagal untuk dikompilasi saat digunakan dalam proyek ASP.NET 4. Jika demikian, tambahkan referensi dalam proyek pustaka kelas .NET Framework ke System.Web.ApplicationServices.dll.
Perubahan kontrol menu Perubahan pada kontrol Menu menghasilkan perilaku berikut:

* Jika MenuRenderingMode diatur ke List, atau jika MenuRenderingMode diatur ke Default dan ControlRenderingCompatibilityVersion diatur ke 4.0 atau lebih baru, properti PopOutImageUrl tidak berpengaruh.
* Jika jalur yang diatur di properti StaticPopOutImageUrl dan DynamicPopOutImageUrl berisi garis miring terbalik (\), gambar tidak akan ditampilkan. (Dalam versi ASP.NET yang lebih lama, jalur dapat menyertakan garis miring terbalik.)
* Alih-alih mengatur properti PopOutImageUrl untuk item menu individual, atur StaticPopOutImageUrl atau DynamicPopOutImageUrl dari kontrol induk Menu.

-atau-

Atur MenuRenderingMode ke Table, atau atur MenuRenderingMode ke Default dan atur ControlRenderingCompatibilityVersion ke 3.5. Pengaturan ini menyebabkan Menu kontrol menggunakan tata letak berbasis tabel HTML yang digunakan di versi ASP.NET sebelumnya.
* Jika jalur di properti StaticPopOutImageUrl atau DynamicPopOutImageUrl berisi garis miring terbalik (\), gantikan karakter garis miring (/).
Perakitan seluler di file Web.config Dalam versi ASP.NET sebelumnya, referensi ke rakitan System.Web.Mobile.dll disertakan dalam file Web.config akar di bagian assemblies di bawah system.web/compilation. Untuk meningkatkan performa, referensi ke rakitan ini telah dihapus.

Catatan: Rakitan System.Web.Mobile.dll dan kontrol seluler ASP.NET disertakan dalam ASP.NET 4, tetapi tidak digunakan lagi.
Jika Anda ingin menggunakan jenis dari rakitan ini, tambahkan referensi ke rakitan di file Web.config akar atau di file Web.config aplikasi.
Output penembolokan Di ASP.NET 1.0, sebuah bug menyebabkan halaman yang di-cache yang menetapkan Location="ServerAndClient" sebagai pengaturan cache output€" mengeluarkan header HTTP Vary:* sebagai tanggapan. Ini memiliki efek memberi tahu browser klien untuk tidak pernah meng-cache halaman secara lokal. Di ASP.NET 1.1, metode SetOmitVaryStar telah ditambahkan, yang dapat dipanggil untuk menekan header Vary:*. Namun, laporan bug menunjukkan bahwa pengembang tidak menyadari perilaku SetOmitVaryStar yang ada.

Di ASP.NET 4, header HTTP Vary:* tidak lagi dipancarkan dari respons yang menentukan arahan berikut:

<%@ OutputCache Location="ServerAndClient" %>

Akibatnya, metode SetOmitVaryStar tidak lagi diperlukan untuk menekan Vary:* header. Dalam aplikasi yang menetapkan "ServerAndClient" untuk atribut Location, halaman akan dapat disimpan dalam cache di browser tanpa mengharuskan Anda memanggil SetOmitVaryStar.
Jika halaman dalam aplikasi harus memancarkan Vary:*, panggil AppendHeader metode seperti yang ditunjukkan pada contoh berikut:

System.Web.HttpResponse.AppendHeader("Vary","*");

Atau, Anda dapat mengubah nilai atribut penembolokan output Location menjadi "Server".
Penguraian halaman Pengurai halaman untuk halaman Web ASP.NET (file .aspx) dan kontrol pengguna (file .ascx) lebih ketat di ASP.NET 4 daripada di versi ASP.NET sebelumnya, dan menandai lebih banyak markup sebagai tidak valid daripada di versi sebelumnya. Periksa pesan kesalahan yang dihasilkan saat halaman berjalan dan perbaiki kesalahan yang dihasilkan dari markup yang tidak valid.
Jenis paspor Dukungan Paspor yang dibangun ke dalam ASP.NET 2.0 sudah kedaluwarsa dan tidak didukung karena perubahan Paspor (sekarang Live ID SDK). Akibatnya, jenis yang terkait dengan Paspor di System.Web.Security sekarang ditandai dengan atribut ObsoleteAttribute. Ubah kode apa pun yang menggunakan jenis Paspor di namespace System.Web.Security (misalnya, PassportIdentity) untuk menggunakan Windows Live ID SDK.
Informasi PathInfo di properti FilePath ASP.NET 4 tidak lagi menyertakan PathInfo nilai yang dikembalikan dari properti seperti FilePath, AppRelativeCurrentExecutionFilePath, dan CurrentExecutionFilePath. Sebaliknya, informasi PathInfo tersedia di PathInfo. Misalnya, bayangkan fragmen URL berikut:

/testapp/Action.mvc/SomeAction

Di versi ASP.NET yang sebelumnya, properti HttpRequest memiliki nilai berikut:

* FilePath: /testapp/Action.mvc/SomeAction
* PathInfo: (kosong)

Di ASP.NET 4, properti HttpRequest malah memiliki nilai berikut:

* FilePath: /testapp/Action.mvc
* PathInfo: SomeAction
Periksa kode Anda untuk tempat di mana Anda mengandalkan properti kelas HttpRequest untuk mengembalikan informasi jalur; ubah kode untuk mencerminkan perubahan dalam cara mengembalikan informasi jalur.
Meminta validasi Untuk meningkatkan validasi permintaan, validasi permintaan ASP.NET dipanggil lebih awal dalam siklus hidup permintaan. Akibatnya, validasi permintaan berjalan untuk permintaan yang bukan untuk file .aspx, seperti untuk panggilan layanan Web dan untuk penangan kustom. Validasi permintaan juga akan aktif saat modul HTTP kustom berjalan di jalur pemrosesan permintaan.

Sebagai hasil dari perubahan ini, permintaan untuk sumber daya selain file .aspx mungkin menimbulkan kesalahan validasi permintaan. Kode kustom yang berjalan di saluran permintaan (misalnya, modul HTTP kustom) mungkin juga menimbulkan kesalahan validasi permintaan.
Jika perlu, Anda dapat kembali ke perilaku lama yang hanya memiliki halaman .aspx yang memicu validasi permintaan dengan menggunakan pengaturan berikut ini di file konfigurasi Web:

<httpRuntime requestValidationMode="2.0" />

Peringatan: Jika Anda kembali ke perilaku lama, pastikan bahwa semua kode di penangan yang ada, modul, dan kode kustom lainnya melakukan pemeriksaan untuk input HTTP yang berpotensi tidak aman yang bisa menjadi vektor serangan XSS.
Perutean Jika Anda membuat situs Web sistem file di Visual Studio 2010 dan situs Web dalam folder yang berisi titik (.) dalam nama folder, perutean URL tidak akan bekerja dengan andal. Kesalahan HTTP 404 dikembalikan dari beberapa jalur virtual. Hal ini terjadi karena Visual Studio 2010 meluncurkan Server Pengembangan Visual Studio menggunakan jalur yang salah untuk direktori virtual akar. * Di halaman Properti untuk situs Web berbasis file, ubah atribut Virtual Path menjadi "/".

-atau-

* Buat proyek aplikasi Web alih-alih proyek situs Web. Proyek aplikasi web tidak memiliki masalah ini, dan perutean URL berfungsi bahkan jika folder proyek memiliki titik di namanya.

-atau-

* Buat situs Web berbasis HTTP yang di-host di IIS. Situs Web yang dihosting IIS dapat memiliki titik di jalur virtual serta di folder file proyek.
Situs SharePoint Jika Anda mencoba menjalankan situs Web ASP.NET 4 yang disebarkan sebagai turunan dari situs Web SharePoint yang berisi tingkat kepercayaan parsial kustom bernama WSS_Minimal, Anda akan melihat kesalahan berikut:

Could not find permission set named 'ASP.Net'.
Saat ini, tidak ada versi SharePoint yang kompatibel dengan ASP.NET. Akibatnya, Anda tidak boleh mencoba menjalankan situs Web ASP.NET 4 sebagai turunan dari situs Web SharePoint.
Standar XHTML 1.1 Untuk mengaktifkan kepatuhan XHTML 1.1 untuk situs Web baru, kontrol ASP.NET di .NET Framework 4 akan menghasilkan HTML yang sesuai dengan XHTML 1.1. Perenderan ini diaktifkan menggunakan opsi berikut di file Web.config di dalam elemen <system.Web>:

<pages controlRenderingCompatibilityVersion="4.0"/>

Opsi ini diatur secara default ke 4.0. Proyek web yang ditingkatkan dari Visual Studio 2008 mengaktifkan pengaturan 3,5 untuk kompatibilitas.
Tidak ada.

Inti

Fitur umum

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
CardSpace Windows CardSpace tidak lagi disertakan dalam .NET Framework; disediakan secara terpisah. Unduh Windows CardSpace dari Pusat Unduhan Microsoft.
File konfigurasi Koreksi telah dibuat dalam cara .NET Framework mengakses file konfigurasi aplikasi. Jika file konfigurasi aplikasi Anda bernama application-name.config, ganti namanya menjadi application-name.exe.config. Misalnya, ganti nama MyApp.config menjadi MyApp.exe.config.
Kompiler kode C# Kelas Compiler, CompilerError, dan ErrorLevel yang berada di namespace Microsoft.CSharp tidak lagi tersedia, dan rakitannya (cscompmgd.dll) tidak lagi disertakan dalam .NET Framework. Gunakan kelas CodeDomProvider dan kelas lainnya di namespace System.CodeDom.Compiler. Untuk informasi selengkapnya, lihat Menggunakan CodeDOM.
Hosting (API tidak terkelola) Untuk meningkatkan kemampuan hosting, beberapa API aktivasi hosting tidak digunakan lagi. Fitur eksekusi berdampingan dalam proses memungkinkan aplikasi memuat dan memulai beberapa versi .NET Framework dalam proses yang sama. Misalnya, Anda dapat menjalankan aplikasi yang memuat add-in (atau komponen) yang didasarkan pada .NET Framework 2.0 SP1 dan add-in yang didasarkan pada .NET Framework 4 dalam proses yang sama. Komponen yang sebelumnya terus menggunakan versi .NET Framework yang sebelumnya, dan komponen baru menggunakan versi .NET Framework yang baru. Gunakan konfigurasi yang dijelaskan dalam Eksekusi Berdampingan Dalam Proses.
Model keamanan baru Kebijakan keamanan akses kode (CAS) telah dimatikan dan diganti dengan model yang disederhanakan, seperti yang dijelaskan dalam Perubahan Keamanan di .NET Framework 4. Modifikasi mungkin diperlukan jika Anda bergantung pada CAS dalam aplikasi Anda. Untuk informasi selengkapnya, lihat Kompatibilitas dan Migrasi Kebijakan Keamanan Akses Kode.

Tanggal dan waktu

Kumpulan nama XML: System

Perakitan: mscorlib (di mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Penghematan siang hari Agar konsisten dengan jam sistem, properti waktu (seperti Local dan Now) sekarang menggunakan aturan sistem operasi alih-alih data .NET Framework lainnya untuk operasi waktu musim panas. Tidak ada.
Memformat string Untuk mendukung pemformatan sensitif budaya, TimeSpan struktur menyertakan kelebihan baru metode ToString, Parse, dan TryParse selain metode ParseExact dan TryParseExact baru. Tidak ada.

Globalisasi

Untuk daftar budaya netral dan spesifik baru, lihat Yang Baru di Globalisasi dan Lokalisasi.

Kumpulan nama XML: System.Globalization

Perakitan: mscorlib (di mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Nama budaya Perubahan nama berikut memengaruhi budaya Jerman, Divehi, dan Afrika:

* CurrencyEnglishName: Nama mata uang untuk budaya Jerman (Swiss) (de-CH) telah diubah dari "sFr." untuk "Pr.".
* LongDatePattern: Pola tanggal panjang untuk budaya Divehi (Maladewa) (dv-MV) telah berubah dari "dd/MMMM/yyyy" menjadi "dd/MM/yyyy".
* PMDesignator: P.M. penanda budaya Afrikaans (Afrika Selatan) (af-ZA) telah berubah dari "nm" menjadi "PM".
Perhatikan perubahan nama budaya.
Parameter LCID Agar konsisten dengan perilaku yang diharapkan dalam pengaturan server otomatisasi, CLR tidak lagi meneruskan budaya saat ini untuk LCID parameter ke aplikasi berbasis COM yang tidak dikelola. Sebaliknya, melewati 1033 (en-us) untuk budaya. Tidak ada modifikasi yang diperlukan kecuali untuk aplikasi asli yang memerlukan budaya tertentu.
Jenis kultur kedaluwarsa Jenis kultur CultureTypes dan CultureTypes sekarang sudah kedaluwarsa.

Untuk kompatibilitas mundur, CultureTypes sekarang mengembalikan budaya netral dan spesifik yang disertakan dengan .NET Framework sebelumnya, dan CultureTypes sekarang mengembalikan daftar kosong.
Gunakan nilai lain dari enumerasi CultureTypes.
Mengambil budaya Dimulai dengan Windows 7, .NET Framework 4 mengambil informasi budaya dari sistem operasi alih-alih menyimpan data itu sendiri. Selain itu, .NET Framework menyinkronkan dengan Windows untuk menyortir dan memasukkan data. Tidak ada.
Standar Unicode 5.1 .NET Framework sekarang mendukung semua karakter Unicode 5.1 -- tambahan sekitar 1400 karakter. Karakter tambahan termasuk simbol baru, panah, diakritik, tanda baca, simbol matematika, coretan dan ideograf CJK, karakter numerik Malayalam dan Telugu tambahan, dan berbagai karakter Myanmar, Latin, Arab, Yunani, Mongolia, dan Sirilik. Skrip baru berikut ini didukung dengan Unicode 5.1: Sunda, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu, dan karakter Malayalam serta Cham. Tidak ada.

Pengecualian

Namespace: System, System.Runtime.ExceptionServices

Perakitan: mscorlib (di mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Pengecualian untuk status proses yang rusak CLR tidak lagi memberikan pengecualian untuk status proses yang rusak ke penangan pengecualian dalam kode yang dikelola. Pengecualian ini menunjukkan bahwa status proses telah rusak. Kami tidak menyarankan Anda menjalankan aplikasi Anda dalam status ini.

Untuk informasi selengkapnya, lihat HandleProcessCorruptedStateExceptionsAttribute dan Menangani Pengecualian Status Rusak entri di majalah MSDN.
Pengecualian mesin eksekusi ExecutionEngineException sekarang sudah kedaluwarsa, karena pengecualian yang dapat diambil akan memungkinkan proses yang tidak stabil untuk terus berjalan. Perubahan ini meningkatkan prediktabilitas dan keandalan dalam runtime. Gunakan InvalidOperationException untuk memberi sinyal kondisi.

Refleksi

Kumpulan nama XML: System.Reflection

Perakitan: mscorlib (di mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Algoritme hash perakitan Properti HashAlgorithm sekarang mengembalikan AssemblyHashAlgorithm, karena runtime tidak mengetahui algoritme hash dari rakitan yang direferensikan saat rakitan tidak dimuat. (Ini mengacu pada penggunaan properti pada rakitan yang direferensikan seperti yang dikembalikan oleh metode GetReferencedAssemblies.) Tidak ada.
Pemuatan rakitan Untuk mencegah pemuatan rakitan yang berlebihan dan untuk menghemat ruang alamat virtual, CLR sekarang memuat rakitan dengan hanya menggunakan fungsi MapViewOfFile Win32. Itu juga tidak lagi memanggil fungsi LoadLibrary.

Perubahan ini memengaruhi aplikasi diagnostik dengan cara berikut:

* ProcessModuleCollection tidak akan lagi berisi modul apa pun dari pustaka kelas .NET Framework (file .dll), seperti yang diperoleh dari panggilan ke Process.GetCurrentProcess().Modules.
* Aplikasi Win32 yang menggunakan fungsi EnumProcessModules tidak akan melihat semua modul terkelola terdaftar.
Tidak ada.
Mendeklarasikan jenis Properti DeclaringType sekarang mengembalikan null dengan benar saat jenis tidak memiliki jenis yang dideklarasikan. Tidak ada.
Delegasi Delegasi sekarang menampilkan ArgumentNullException alih-alih NullReferenceException ketika nilai null diteruskan ke konstruktor delegasi. Pastikan bahwa penanganan pengecualian apa pun menangkap ArgumentNullException.
Perubahan lokasi cache perakitan global Untuk rakitan .NET Framework 4, cache rakitan global telah dipindahkan dari direktori Windows (%WINDIR%) ke subdirektori Microsoft.Net (%WINDIR%\Microsoft.Net). Rakitan dari versi sebelumnya tetap berada di direktori lama.

Enumerasi ASM_CACHE_FLAGS yang tidak dikelola berisi ASM_CACHE_ROOT_EX tanda baru. Tanda ini mendapatkan lokasi cache untuk rakitan .NET Framework 4, yang dapat diperoleh dengan fungsi GetCachePath.
Tidak ada, dengan asumsi bahwa aplikasi tidak menggunakan jalur eksplisit ke rakitan, yang bukan merupakan praktik yang disarankan.
Alat cache perakitan global Gacutil.exe (Alat Singgahan Perakitan Global) tidak lagi mendukung penampil plugin shell. Tidak ada.

Interoperabilitas

Kumpulan nama XML: System.Runtime.InteropServices

Perakitan: mscorlib (di mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Panjang buffer (API tidak terkelola) Untuk menyimpan memori, fungsionalitas parameter pBufferLengthOffset untuk metode ICorProfilerInfo2::GetStringLayout telah diubah agar sesuai dengan parameter pStringLengthOffset. Kedua parameter sekarang menunjuk ke lokasi offset dari panjang string. Panjang buffer telah dihapus dari representasi kelas string. Hapus semua dependensi pada panjang buffer.
Penelusuran kesalahan JIT Untuk menyederhanakan pendaftaran untuk penelusuran kesalahan just-in-time (JIT), debugger .NET Framework sekarang hanya menggunakan kunci registri AeDebug, yang mengontrol perilaku debug JIT untuk kode asli. Perubahan ini menghasilkan sebagai berikut:

* Anda tidak dapat lagi mendaftarkan dua debugger yang berbeda untuk kode terkelola dan asli.
* Anda tidak dapat lagi memulai debugger secara otomatis untuk proses non-interaktif, tetapi Anda dapat meminta pengguna untuk proses interaktif.
* Anda tidak lagi diberitahu ketika debugger gagal untuk memulai, atau ketika tidak ada debugger terdaftar yang harus dimulai.
* Kebijakan peluncuran otomatis yang bergantung pada interaktivitas aplikasi tidak lagi didukung.
Sesuaikan operasi penelusuran kesalahan sesuai kebutuhan.
Pemanggilan platform Untuk meningkatkan performa dalam interoperabilitas dengan kode yang tidak dikelola, konvensi pemanggilan yang salah dalam pemanggilan platform sekarang menyebabkan aplikasi gagal. Di versi sebelumnya, lapisan marshalling menyelesaikan kesalahan ini di tumpukan. Penelusuran kesalahan aplikasi Anda di Microsoft Visual Studio memperingatkan Anda tentang kesalahan ini sehingga Anda dapat memperbaikinya.

Jika Anda memiliki binari yang tidak dapat diperbarui, Anda dapat menyertakan elemen <NetFx40_PInvokeStackResilience> dalam file konfigurasi aplikasi Anda untuk memungkinkan kesalahan panggilan diselesaikan di tumpukan seperti pada versi sebelumnya. Namun, ini dapat memengaruhi performa aplikasi Anda.
Antarmuka yang dihapus (API tidak terkelola) Untuk menghindari pengembang yang tidak memiliki arah, antarmuka berikut telah dihapus, karena tidak menyediakan skenario run-time yang berguna, dan CLR tidak menyediakan atau menerima implementasi apa pun:

* INativeImageINativeImageDependency
* INativeImageInstallInfo
* INativeImageEvaluate
* INativeImageConverter
* ICorModule
* IMetaDataConverter
Tidak ada.

Data

Bagian ini menjelaskan masalah migrasi untuk menggunakan himpunan data dan klien SQL, Kerangka kerja Entitas, LINQ ke SQL, dan Server Data WCF (sebelumnya dikenal sebagai Data Services ADO.NET).

Himpunan data dan Klien SQL

Tabel berikut menjelaskan penyempurnaan fitur yang sebelumnya memiliki keterbatasan atau masalah lainnya.

Namespace: System.Data, System.Data.Objects.DataClasses, System.Data.SqlClient

Rakitan: System.Data (di System.Data.dll), System.Data.Entity (di System.Data.Entity.dll)

Fitur Perbedaan dari 3.5 SP1
Skenario POCO Antarmuka IRelatedEnd memiliki metode baru untuk meningkatkan kegunaannya dalam skenario Plain Old CLR Object (POCO). Metode baru ini menggunakan Object sebagai ganti entitas IEntityWithRelationships sebagai parameter.
Mengedit baris Metode IndexOf, seperti yang diterapkan oleh kelas DataView, sekarang mengembalikan nilai baris yang sedang diedit dengan benar, alih-alih mengembalikan -1.
Peristiwa Peristiwa PropertyChanged sekarang dimunculkan ketika sebuah baris berada dalam status termodifikasi dan metode RejectChanges dipanggil. Perubahan ini mempermudah pembuatan kontrol antarmuka pengguna yang mengekspos konten objek DataSet.
Pengecualian Prepare Metode sekarang menampilkan InvalidOperationException saat koneksi tidak diatur atau dibuka alih-alih NullReferenceException.
Tampilan Pemetaan Kesalahan pemetaan tampilan kueri sekarang ditangkap pada waktu desain alih-alih menampilkan NullReferenceException pada durasi.

Validasi pemetaan sekarang menangkap kesalahan di mana dua kumpulan asosiasi dalam Skema Konseptual (CSDL) dipetakan ke kolom yang sama.
Transaksi Jika aplikasi mencoba mengeksekusi pernyataan pada koneksi setelah transaksi selesai (termasuk dibatalkan atau digulung balik), InvalidOperationException sekarang dilemparkan. Versi sebelumnya tidak mengeluarkan pengecualian dan membiarkan Anda menjalankan perintah tambahan bahkan jika transaksi dibatalkan.

Entity Framework

Tabel berikut menjelaskan penyempurnaan fitur yang sebelumnya memiliki keterbatasan atau masalah lainnya.

Namespace: System.Data, System.Data.Objects, System.Data.Objects.DataClasses

Rakitan: System.Data.Entity (in System.Data.Entity.dll)

Fitur Perbedaan dari 3.5 SP1
Objek entitas Sekarang ada kesamaan antara Detach metode dan status objek entitas saat metode SaveChanges dipanggil. Konsistensi yang ditingkatkan ini mencegah pengecualian yang tidak terduga dilemparkan.
Entity SQL Aturan telah ditingkatkan untuk resolusi pengidentifikasi di Entity SQL.

Pengurai Entity SQL telah meningkatkan logika untuk menyelesaikan pengidentifikasi multi-bagian.
Anotasi struktural Kerangka Entitas sekarang mengenali anotasi struktural.
Kueri Peningkatan berikut dibuat dalam kueri:

* Kueri GroupBy yang menggunakan kunci null di atas koleksi kosong tidak akan mengembalikan baris apa pun, terlepas dari apakah ada pilihan tambahan dalam kueri.
* SQL yang dihasilkan dalam kueri LINQ dan Entity-SQL sekarang memperlakukan parameter string sebagai nilai non-Unicode secara default.

LINQ ke SQL

Tabel berikut menjelaskan penyempurnaan fitur yang sebelumnya memiliki keterbatasan atau masalah lainnya.

Kumpulan nama XML: System.Data.Linq

Perakitan: System.Data.Linq (di System.Data.Linq.dll)

Fitur Perbedaan dari 3.5 SP1
Peristiwa Koleksi EntitySet<TEntity> sekarang memunculkan peristiwa ListChanged untuk operasi tambah dan hapus jika EntitySet<TEntity> tidak dimuat, selain meningkatkan peristiwa saat koleksi dimuat.
Kueri Skip(0)tidak lagi diabaikan dalam kueri LINQ ke SQL. Akibatnya, kueri yang memiliki metode ini mungkin berperilaku berbeda. Misalnya, dalam beberapa kasus, klausul OrderBy diperlukan dengan Skip(0), dan kueri sekarang akan mengeluarkan pengecualian NotSupportedException jika klausul OrderBy tidak disertakan.

WCF Data Services

Tabel berikut menjelaskan penyempurnaan fitur yang sebelumnya memiliki keterbatasan atau masalah lainnya.

Namespace: System.Data.Services, System.Data.Services.Client, System.Data.Services.Common, System.Data.Services.Providers

Assemblies: System.Data.Services (in System.Data.Services.dll), System.Data.Services.Client (in System.Data.Services.Client.dll)

Fitur Perbedaan dari 3.5 SP1
Konten Biner Batched WCF Data Services sekarang mendukung konten biner batch dalam permintaan dan tanggapan.
Interseptor perubahan Interseptor perubahan sekarang dijalankan untuk permintaan penghapusan.

Interseptor perubahan adalah metode yang berjalan setiap kali permintaan diterima oleh server untuk memodifikasi entitas dalam kumpulan entitas. Ini berjalan sebelum permintaan yang masuk dieksekusi. Interseptor perubahan menyediakan akses ke entitas yang sedang diubah dan operasi yang sedang dilakukan di atasnya.
Pengecualian Kondisi berikut sekarang memberikan pengecualian yang lebih berguna daripada NullReferenceException:

* TimeoutException jika panggilan ke layanan data habis.
* DataServiceRequestException jika permintaan buruk dibuat ke layanan data.

Dalam aplikasi Anda, Anda harus mengubah penanganan pengecualian untuk menangkap pengecualian baru.
Header Peningkatan berikut dilakukan pada header:

* WCF Data Services sekarang dengan benar menolak header eTag yang memiliki nilai yang tidak ditentukan.
* WCF Data Services sekarang mengembalikan kesalahan dan tidak menjalankan permintaan untuk permintaan penghapusan ke link ketika header if-* ada dalam permintaan.
* WCF Data Services sekarang mengembalikan kesalahan ke klien dalam format (Atom, JSON) yang ditentukan klien di header Terima.
Pembaca JSON Pembaca JavaScript Object Notation (JSON) sekarang mengembalikan kesalahan dengan benar saat membaca karakter escape backslash ("\"), saat memproses muatan JSON yang dikirim ke Layanan Data WCF.
Gabungan Perbaikan berikut dilakukan pada enumerasi MergeOption:

* Opsi penggabungan MergeOption tidak lagi mengubah entitas pada klien sebagai akibat dari tanggapan berikutnya dari layanan data.
* Opsi MergeOption sekarang konsisten antara SQL dinamis dan pembaruan berbasis prosedur tersimpan.
Permintaan Metode OnStartProcessingRequest sekarang dipanggil sebelum permintaan ke layanan data diproses. Ini memungkinkan permintaan berfungsi dengan benar untuk layanan ServiceOperation.
Aliran WCF Data Services tidak lagi menutup aliran yang mendasari untuk operasi baca dan tulis.
Uri Pelepasan URI oleh klien Layanan Data WCF telah diperbaiki.

Windows Communication Foundation (WCF)

Tabel berikut menjelaskan penyempurnaan fitur yang sebelumnya memiliki keterbatasan atau masalah lainnya.

Fitur Perbedaan dari 3.5 SP1
File konfigurasi Untuk mengaktifkan pewarisan perilaku melalui hierarki file konfigurasi, WCF sekarang mendukung penggabungan di seluruh file konfigurasi.

Model pewarisan konfigurasi sekarang diperluas untuk memungkinkan pengguna menentukan perilaku yang akan diterapkan ke semua layanan yang berjalan di komputer.

Anda mungkin mengalami perubahan perilaku jika ada perilaku dengan nama yang sama di tingkat hierarki yang berbeda.
Hosting layanan Anda tidak dapat lagi menentukan elemen konfigurasi <serviceHostingEnvironment> di tingkat layanan dengan menambahkan atribut allowDefinition="MachineToApplication" ke definisi elemen.

Menentukan <serviceHostingEnvironment> elemen di tingkat layanan secara teknis tidak benar dan menyebabkan perilaku yang tidak konsisten.

Windows Presentation Foundation (WPF)

Aplikasi

Namespace: System.Windows, System.Windows.Controls

Rakitan: PresentationFramework (dalam PresentationFramework.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Penanganan pengecualian Untuk mengaktifkan kesalahan agar terdeteksi lebih awal, WPF menampilkan TargetInvocationException dan mengatur properti InnerException ke pengecualian kritis, seperti NullReferenceException, OutOfMemoryException, StackOverflowException, dan SecurityException, alih-alih menangkap pengecualian asli. Tidak ada.
Sumber daya tertaut Untuk mempermudah penautan, file sumber daya (seperti gambar) yang terletak di lokasi selain struktur folder proyek menggunakan jalur lengkap file sumber daya, bukan hanya nama filenya sebagai ID sumber daya saat aplikasi dibangun. Aplikasi akan dapat menemukan file pada durasi. Tidak ada.
Aplikasi kepercayaan parsial Untuk pertimbangan keamanan, aplikasi berbasis Windows yang berjalan dengan kepercayaan parsial dan berisi kontrol WebBrowser atau kontrol Frame yang berisi HTML akan menampilkan SecurityException saat kontrol dibuat.

Aplikasi browser akan mengeluarkan pengecualian dan menampilkan pesan jika semua kondisi berikut terpenuhi:

* Aplikasi berjalan di Firefox.
* Aplikasi berjalan dengan kepercayaan sebagian di zona Internet dari situs yang tidak tepercaya.
* Aplikasi berisi kontrol WebBrowser atau kontrol Frame yang berisi HTML.

Aplikasi yang dijalankan dari situs tepercaya atau dari zona intranet tidak akan terpengaruh.
Di aplikasi browser, Anda dapat mengurangi perubahan ini dengan melakukan salah satu hal berikut:

* Jalankan aplikasi browser dengan penuh kepercayaan.
* Minta pelanggan menambahkan situs aplikasi ke zona situs tepercaya.
Kamus sumber daya Untuk meningkatkan kamus sumber daya tingkat tema dan mencegahnya berubah, sumber daya yang dapat dibekukan yang didefinisikan dalam kamus sumber daya dan digabungkan ke dalam kamus tingkat tema sekarang selalu ditandai sebagai beku dan tidak dapat diubah. Ini adalah perilaku yang diharapkan untuk sumber daya yang dapat dibekukan. Aplikasi yang memodifikasi sumber daya yang ditentukan dalam kamus gabungan tingkat tema harus mengkloning sumber daya dan memodifikasi salinan yang digandakan. Alternatifnya, sumber daya dapat ditandai x:Shared="false" sehingga ResourceDictionary membuat salinan baru setiap kali sumber daya dikueri.
Windows 7 Untuk membuat aplikasi WPF bekerja lebih baik pada Windows 7, perbaikan berikut dilakukan untuk memperbaiki perilaku jendela:

* Status dok dan gestur sekarang berfungsi seperti yang diharapkan berdasarkan interaksi pengguna.
* Bilah tugas memerintahkan Cascade windows, Menampilkan jendela bertumpuk, dan Menampilkan jendela berdampingan sekarang memiliki perilaku yang benar dan memperbarui properti yang sesuai.
* Properti Top, Left, Width, dan Height untuk jendela yang dimaksimalkan atau diminimalkan sekarang berisi lokasi pemulihan jendela yang benar, bukan nilai lainnya, bergantung pada monitor.
Tidak ada.
Gaya dan transparansi Windows InvalidOperationException ditampilkan jika Anda mencoba mengatur WindowStyle ke nilai selain WindowStyle ketika AllowsTransparency adalah true dan WindowState adalah WindowState. Jika Anda harus mengubah WindowStyle saat AllowsTransparency menjadi true, Anda dapat memanggil fungsi Win32 SetWindowLongPtr.
Penampil XPS WPF tidak menyertakan Microsoft XML Paper Specification Essentials Pack (XPSEP). XPSEP disertakan dengan Windows 7 dan Windows Vista.

Pada komputer yang menjalankan Windows XP tanpa menginstal .NET Framework 3.5 SP1, mencetak dengan menggunakan API WPF selain yang ada di PrintDialog akan mengandalkan WINSPOOL. Beberapa kemampuan printer tidak akan dilaporkan dan beberapa pengaturan printer tidak akan diterapkan selama pencetakan.
Jika perlu, instal Paket Esensial Spesifikasi Kertas Microsoft XML.

Kontrol

Namespace: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input

Rakitan: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Kotak dialog Untuk meningkatkan keandalan, metode ShowDialog dipanggil pada rangkaian yang sama yang membuat kontrol FileDialog. Pastikan untuk membuat kontrol FileDialog dan memanggil metode ShowDialog pada rangkaian yang sama.
Jendela mengambang Untuk memperbaiki logika pemulihan fokus yang salah terus mengaktifkan kembali jendela mengambang (membuatnya tampak seperti kotak dialog modal), pemulihan fokus sekarang dicegah jika kandidat bukan turunan jendela. Tidak ada.
Item dalam koleksi Saat item dipindahkan atau ditambahkan ke koleksi yang mendasarinya, item tersebut akan muncul di CollectionView di lokasi relatif yang sama jika CollectionView tidak diurutkan. Ini memberikan konsistensi antara posisi item dalam koleksi dan terkait CollectionView. Gunakan metode ContainerFromItem atau IndexOf untuk menemukan lokasi item di CollectionView alih-alih mengandalkan lokasi tetap item.
Layout Untuk menghilangkan tata letak ulang yang tidak perlu, mengubah ShowsNavigationUI tidak lagi membatalkan tata letak atau menyebabkan tata letak lain berlalu. Jika Anda berharap bahwa perubahan ShowsNavigationUI akan menyebabkan pass tata letak lain, panggil InvalidateVisual setelah Anda mengatur properti.
Menu Untuk mengaktifkan teks ClearType di menu pop-up, modifikasi dilakukan pada kelas ControlTemplate dan pada kontrol MenuItem dan kontrol lainnya. Aplikasi tidak boleh bergantung pada struktur visual templat kontrol. Hanya bagian yang disebutkan dari bagian ControlTemplate yang merupakan bagian dari kontrak publik. Jika aplikasi harus menemukan objek tertentu di ControlTemplate, telusuri pohon visual untuk jenis tertentu daripada mengandalkan lokasi tetap objek di pohon.
Menavigasi Jika Frame menavigasi langsung ke suatu lokasi, properti IsNavigationInitiator adalah true setelah navigasi awal. Perubahan ini mencegah peristiwa tambahan dimunculkan selama skenario startup. Tidak ada.
Pop-up Delegasi CustomPopupPlacementCallback sekarang dapat dipanggil beberapa kali selama pass tata letak, bukan hanya sekali. Jika delegasi CustomPopupPlacementCallback Anda menghitung posisi Popup berdasarkan posisi sebelumnya, hitung ulang posisi hanya jika nilai parameter popupSize, targetSize, atau offset berubah.
Nilai properti Metode SetCurrentValue sekarang memungkinkan Anda mengatur properti ke nilai efektif, meskipun tetap menghormati pengikatan, gaya, atau pemicu apa pun yang memengaruhi properti. Penulis kontrol harus menggunakan SetCurrentValue setiap kali nilai properti berubah sebagai efek samping dari beberapa tindakan lain, termasuk manipulasi pengguna.
Kotak teks Untuk pertimbangan keamanan, metode Copy dan Cut gagal secara diam-diam saat dipanggil dalam kepercayaan parsial.

Selain itu, eksekusi terprogram dari properti Copy atau Cut pada kontrol yang diturunkan dari TextBoxBase akan diblokir dalam kepercayaan parsial. Namun, perintah salin dan potong yang dimulai pengguna, seperti mengklik tombol yang properti yang Command terikat ke salah satu perintah ini, akan berfungsi. Salin dan potong pintasan papan ketik standar dan menu konteks akan tetap berfungsi seperti sebelumnya dalam kepercayaan sebagian.
Ikat perintah Copy atau Cut ke tindakan yang dimulai pengguna, seperti mengeklik tombol.

Grafik

Namespace: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Media.Effects

Rakitan: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Efek bitmap Untuk meningkatkan performa, kelas BitmapEffect dan kelas yang mewarisi dari kelas BitmapEffect, meskipun masih ada, dinonaktifkan. Efeknya akan dirender dengan menggunakan alur perenderan yang dipercepat perangkat keras jika kondisi berikut ini benar:

* Aplikasi menggunakan DropShadowBitmapEffect atau BlurBitmapEffect yang memiliki properti radius yang ditetapkan kurang dari 100 DIU.
* Kartu video di komputer yang menjalankan aplikasi mendukung pixel efek gambar 2.0.

Jika kondisi ini tidak terpenuhi, objek BitmapEffect tidak akan berpengaruh.

Selain itu, Visual Studio menghasilkan peringatan kompiler ketika menemukan objek BitmapEffect atau subkelas.

Metode PushEffect ditandai sebagai kedaluwarsa.
Menghentikan penggunaan BitmapEffect lama dan kelas turunan dan alih-alih gunakan kelas baru turunan dari Effect: BlurEffect, DropShadowEffect, dan ShaderEffect.

Anda juga dapat membuat efek Anda sendiri dengan mewarisi dari kelas ShaderEffect.
Bingkai bitmap Objek BitmapFrame yang dikloning sekarang menerima peristiwa DownloadProgress, DownloadCompleted, dan DownloadFailed. Ini memungkinkan gambar yang diunduh dari Web dan diterapkan ke kontrol Image melalui Style berfungsi dengan benar.

Anda akan melihat perubahan perilaku hanya jika semua pernyataan berikut ini benar:

* Anda berlangganan peristiwa DownloadProgress, DownloadCompleted, atau DownloadFailed.
* Sumber BitmapFrame berasal dari Web.
* BitmapFrame dikloning saat unduhan masih berlangsung.
Periksa pengirim di penanganan aktivitas dan ambil tindakan hanya jika pengirimnya adalah asli BitmapFrame.
Mengodekan gambar Untuk mencegah IOException tidak ditangani saat gambar mungkin tidak didekode, BitmapSource kelas akan memunculkan peristiwa DecodeFailed saat tidak mendekode gambar. Hapus penanganan pengecualian untuk IOException, dan gunakan peristiwa DecodeFailed untuk memeriksa kegagalan dekode.

Input

Namespace: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input

Rakitan: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Mengikat instans perintah Untuk menyediakan mekanisme untuk mengikat instans perintah berbasis View-Model yang digerakkan ke gerakan input berbasis Tampilan, kelas InputBinding sekarang mewarisi dari Freezable alih-alih DependencyObject. Properti berikut sekarang menjadi properti dependensi:

* Command
* CommandParameter
* CommandTarget

Perubahan ini menghasilkan sebagai berikut:

* Objek InputBinding sekarang dibekukan saat didaftarkan alih-alih tetap dapat diubah.
* Anda tidak dapat mengakses objek InputBinding tingkat instans dari beberapa rangkaian, karena pembatasan kelas DependencyObject.
* Anda tidak dapat mengubah pengikatan input tingkat kelas setelah pendaftarannya, karena pembatasan kelas Freezable.
* Anda tidak dapat menentukan pengikatan input pada instans perintah yang dibuat dalam Tampilan-Model.
Buat instans terpisah dari kelas InputBinding pada rangkaian terpisah jika binding dapat diubah, atau bekukan jika tidak. Jangan mengubah statik tingkat kelas InputBinding setelah didaftarkan.
Aplikasi browser Aplikasi Browser WPF (.XBAP) sekarang memproses peristiwa kunci seperti aplikasi WPF yang mandiri sehingga objek menerima peristiwa kunci yang dirutekan dalam urutan yang benar. Tidak ada.
Tombol kombinasi mati WPF mengaburkan tombol kunci mati, yang tidak menghasilkan karakter yang terlihat, tetapi sebaliknya menunjukkan bahwa kunci tersebut akan digabungkan dengan kunci huruf berikutnya untuk menghasilkan satu karakter. Peristiwa input kunci, seperti peristiwa KeyDownEvent, melaporkan saat tombol kunci mati dengan mengatur properti Key ke nilai Key. Ini biasanya merupakan perilaku yang diharapkan karena aplikasi biasanya tidak bermaksud untuk merespons input keyboard yang membuat karakter gabungan. Aplikasi yang mengharapkan untuk membaca kunci yang merupakan bagian dari karakter gabungan bisa mendapatkan kunci yang sekarang dikaburkan dengan menggunakan properti DeadCharProcessedKey.
Manajer fokus Ketika metode FocusManager.GetFocusedElement(DependencyObject) meneruskan elemen yang memiliki properti terlampir IsFocusScope yang diatur ke true, metode akan mengembalikan elemen yang merupakan elemen terakhir yang berfokus pada keyboard dalam cakupan fokus tersebut jika dan hanya jika elemen yang dikembalikan milik objek PresentationSource yang sama dengan elemen yang diteruskan ke metode. Tidak ada.

UI Automation

Namespace: System.Windows, System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.Data, System.Windows.Input

Rakitan: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), UIAutomationProvider (in UIAutomationProvider.dll), WindowsBase (in WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Hierarki tampilan kelas Kelas TreeViewAutomationPeer dan TreeViewItemAutomationPeer mewarisi dari ItemsControlAutomationPeer alih-alih FrameworkElementAutomationPeer. Jika Anda mewarisi dari kelas TreeViewItemAutomationPeer dan mengganti metode GetChildrenCore, pertimbangkan untuk mengembalikan objek yang diwarisi dari kelas TreeViewDataItemAutomationPeer baru.
Kontainer di luar layar Untuk memperbaiki nilai pengembalian yang salah, metode IsOffscreenCore sekarang mengembalikan false dengan benar untuk kontainer item yang digulir keluar dari tampilan. Juga, nilai metode tidak terpengaruh oleh oklusi oleh jendela lain, atau oleh apakah elemen tersebut terlihat pada monitor tertentu. Tidak ada.
Menu dan objek turunan Untuk mengaktifkan otomatisasi antarmuka pengguna menu yang berisi turunan selain objek MenuItem, metode GetChildrenCore sekarang mengembalikan objek AutomationPeer dari objek UIElement turunan, bukan objek MenuItemAutomationPeer. Tidak ada.
Antarmuka dan perakitan baru Untuk mengaktifkan fitur baru untuk otomatisasi antarmuka pengguna, antarmuka berikut telah ditambahkan:

* IItemContainerProvider
* ISynchronizedInputProvider
* IVirtualizedItemProvider
Setiap proyek yang membangun rekan otomatisasi WPF harus menambahkan referensi eksplisit ke UIAutomationProvider.dll.
Thumbs Metode GetClassNameCore mengembalikan nilai alih-alih null. Oleh karena itu, kontrol seperti GridSplitter yang mewarisi dari kelas Thumb akan melaporkan nama ke Otomatisasi antarmuka pengguna. Tidak ada.
Elemen tervirtualisasi Untuk meningkatkan performa, metode GetChildrenCore hanya mengembalikan objek turunan yang sebenarnya ada di pohon visual, bukan semua objek turunan, terlepas dari apakah objek tersebut divirtualisasikan. Gunakan ItemContainerPattern untuk mengulangi semua item dari ItemsControlAutomationPeer.

XAML

Namespace: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Markup

Rakitan: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang disarankan
Ekstensi markup WPF sekarang dengan benar selalu menggunakan nilai dari metode ProvideValue alih-alih mengembalikan objek MarkupExtension dalam kasus tertentu ketika ekstensi markup digunakan untuk mengatur properti atau membuat item dalam koleksi. Ekstensi markup mungkin mengembalikan dirinya dalam beberapa kasus. Jika aplikasi Anda mengakses sumber daya yang mengembalikan objek MarkupExtension di versi sebelumnya, referensikan objek yang dikembalikan dari ProvideValue, bukan objek MarkupExtension.
Mengurai atribut Atribut di XAML sekarang hanya dapat memiliki satu periode. Misalnya, berikut ini valid:

<Button Background="Red"/> (tanpa titik)

<Button Button.Background = "Red"/> (satu periode)

Berikut ini tidak lagi valid:

<Button Control.Button.Background = "Red"/> (lebih dari satu periode)
Memperbaiki atribut XAML yang memiliki lebih dari satu titik.

XML

Baris dalam tabel ini menjelaskan peningkatan fitur yang sebelumnya memiliki keterbatasan atau masalah lainnya.

Skema dan transformasi

Namespace: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Rakitan: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)

Fitur Perbedaan dari 3.5 SP1
Skema bunglon Untuk mencegah kerusakan data, skema bunglon sekarang dikloning dengan benar saat disertakan dengan beberapa skema.

Skema bunglon adalah skema yang tidak memiliki namespace layanan target, dan ketika disertakan dalam XSD lain, skema tersebut mengambil namespace layanan target dari skema impor. Mereka sering digunakan untuk memasukkan jenis umum ke dalam skema.
Fungsi ID Fungsi id XSLT sekarang mengembalikan nilai yang benar alih-alih null saat objek XmlReader diteruskan ke XLST.

Jika pengguna membuat objek XmlReader dari kelas LINQ ke XML dengan menggunakan metode CreateReader, dan objek XmlReader ini diteruskan ke XSLT, setiap contoh fungsi id di XSLT sebelumnya dikembalikan null. Ini bukan nilai pengembalian yang diizinkan untuk fungsi id.
Atribut namespace layanan Untuk mencegah kerusakan data, objek XPathNavigator sekarang mengembalikan nama lokal atribut x:xmlns dengan benar.
Deklarasi namespace layanan Objek XmlReader pada subtree tidak lagi membuat deklarasi namespace layanan duplikat dalam satu elemen XML.
Validasi skema Untuk mencegah validasi skema yang salah, kelas XmlSchemaSet memungkinkan skema XSD dikompilasi dengan benar dan konsisten. Skema ini dapat mencakup skema lain; misalnya, A.xsd dapat menyertakan B.xsd, yang dapat menyertakan C.xsd. Mengkompilasi salah satu dari ini menyebabkan grafik dependensi ini dilintasi.
Fungsi skrip Fungsi yang tersedia untuk fungsi tidak lagi salah mengembalikan false saat fungsi tersebut benar-benar tersedia.
Uri Metode Load sekarang mengembalikan BaseURI yang benar dalam kueri LINQ.

Validasi

Namespace: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Rakitan: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)

Fitur Perbedaan dari 3.5 SP1
Pemecah masalah namespace layanan Metode ReadContentAs tidak lagi mengabaikan penyelesai masalah IXmlNamespaceResolver yang diteruskan ke sana.

Di versi sebelumnya, penyelesai masalah namespace yang ditentukan diabaikan, dan XmlReader digunakan sebagai gantinya.
Spasi kosong Untuk mencegah kehilangan data saat Anda membuat pembaca, metode Create tidak lagi membuang ruang kosong yang signifikan.

Validasi XML mengenali mode konten campuran, di mana teks dapat dicampur dengan markup XML. Dalam mode campuran, semua ruang kosong penting dan harus dilaporkan.

Menulis

Namespace: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Rakitan: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)

Fitur Perbedaan dari 3.5 SP1
Referensi entitas Untuk mencegah kerusakan data, referensi entitas tidak lagi diberi hak dua kali dalam atribut XML.

Jika pengguna mencoba menulis entitas ke dalam atribut xmlns atau ke dalam atribut xml:lang atau xml:space dengan menggunakan metode WriteEntityRef, entitas diberi hak dua kali dalam output, sehingga menyebabkan kerusakan data.
Penanganan baris langsung Untuk mencegah kerusakan data, objek XmlWriter menggunakan opsi NewLineHandling.

Lihat juga