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 apa pun dalam aplikasi Anda. Untuk yang mungkin melibatkan modifikasi, lihat kolom Perubahan yang Direkomendasikan dari tabel. Perubahan penting dipecah berdasarkan area, misalnya, ASP.NET dan Windows Presentation Foundation (WPF).

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

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

ASP.NET dan Web

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

Assembly: System.Web (dalam System.Web.dll)

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

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

Objek HttpBrowserCapabilities (yang diekspos oleh properti halaman Request.Browse ) 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 dalam versi ASP.NET sebelumnya.
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 selengkapnya, lihat https://www.asp.net/mobile situs Web.
Aplikasi anak yang berjalan di bawah versi campuran ASP.NET ASP.NET 4 aplikasi yang dikonfigurasi sebagai turunan aplikasi yang menjalankan versi ASP.NET sebelumnya mungkin gagal dimulai 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 "ASP.NET 4 Aplikasi Anak Gagal Dimulai Saat Di Bawah Aplikasi ASP.NET 2.0 atau ASP.NET 3.5" dalam dokumen ASP.NET 4 Perubahan yang Mengganggu di situs web ASP.NET.
Perubahan ClientID Pengaturan baru clientIDMode di ASP.NET 4 memungkinkan Anda menentukan bagaimana ASP.NET menghasilkan id atribut untuk elemen HTML. Dalam versi ASP.NET sebelumnya, perilaku default setara dengan AutoID pengaturan clientIDMode. Pengaturan default adalah Predictable sekarang. Untuk informasi selengkapnya, lihat ASP.NET Identifikasi Kontrol Server Web. Jika Anda menggunakan Visual Studio untuk meningkatkan aplikasi dari ASP.NET 2.0 atau ASP.NET 3.5, alat ini secara otomatis menambahkan pengaturan ke file Web.config yang mempertahankan perilaku versi .NET Framework 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) ASP.NET fitur 2.0 NET yang ditambahkan dalam ASP.NET 3.5 menggunakan model keamanan akses kode (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 cache perakitan global mungkin gagal dengan berbagai pengecualian keamanan. Aplikasi kepercayaan parsial yang mengandalkan modifikasi ekstensif pada kebijakan CAS mesin mungkin juga gagal dan melemparkan pengecualian keamanan. Anda dapat mengembalikan kepercayaan parsial ASP.NET 4 aplikasi ke perilaku ASP.NET 1.1 dan 2.0 dengan menggunakan atribut baru legacyCasModel dalam trust elemen konfigurasi, seperti yang ditunjukkan dalam contoh berikut:

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

Penting: Mengembalikan ke model CAS yang lebih lama mungkin mewakili pengurangan keamanan.

Untuk informasi selengkapnya tentang model keamanan akses kode ASP.NET 4 baru, lihat Keamanan Akses Kode di aplikasi ASP.NET 4.
File konfigurasi File konfigurasi akar (file machine.config dan file Web.config root) untuk .NET Framework dan ASP.NET 4 telah diperbarui untuk menyertakan sebagian besar informasi konfigurasi boilerplate yang ditemukan dalam file Web.config aplikasi di ASP.NET 3.5. Karena kompleksitas sistem konfigurasi IIS 7 dan IIS 7.5 terkelola, 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 agar 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 lakukan tergantung pada kombinasi perangkat lunak yang sedang Anda kerjakan, 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 Konfigurasi Akar Baru ASP.NET 4" dalam dokumen Perubahan Krusial ASP.NET 4 pada situs web ASP.NET.
Penyajian kontrol Di versi ASP.NET sebelumnya, beberapa kontrol memancarkan markup yang tidak dapat Anda nonaktifkan. Secara default, jenis markup ini tidak lagi dihasilkan di ASP.NET 4. Perubahan penyajian memengaruhi kontrol berikut:

* Kontrol Image dan ImageButton tidak lagi merender border="0" atribut.
* Kelas BaseValidator dan kontrol validasi yang berasal dari kelas tersebut tidak lagi menampilkan teks merah secara default.
* Kontrol HtmlForm tidak menghasilkan atribut name.
Table* Kontrol tidak lagi merender sebuah border="0" atribut.

Kontrol-kontrol yang tidak dirancang untuk menerima 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 induk).
Jika Anda menggunakan Visual Studio untuk meningkatkan aplikasi dari ASP.NET 2.0 atau ASP.NET 3.5, alat ini secara otomatis menambahkan pengaturan ke file Web.config yang mempertahankan penyajian warisan. Namun, jika Anda meningkatkan aplikasi dengan mengubah kumpulan aplikasi di IIS untuk menargetkan .NET Framework 4, ASP.NET menggunakan mode penyajian baru secara default. Untuk menonaktifkan mode penyajian baru, tambahkan pengaturan berikut ke file Web.config:

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

<form action="Default.aspx" />

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

<form action="" />

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

* Halaman .aspx dikirim ke browser dengan atribut elemen formaction yang diatur ke "".
* Formulir diposting 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, badan entitas tidak lagi tersedia untuk modul kode asli apa pun yang berjalan dalam mode Terintegrasi IIS 7 atau IIS 7.5.
* Objek IIS DefaultDocumentModule akhirnya berjalan dan membuat permintaan anak ke dokumen Default.aspx. Namun, karena badan entitas telah dibaca oleh sepotong kode terkelola, tidak ada badan entitas yang tersedia untuk dikirim ke permintaan anak.
* Ketika alur HTTP berjalan untuk permintaan anak, handler untuk file .aspx berjalan selama fase handler-execute.

Karena tidak ada badan entitas, tidak ada variabel formulir dan tidak ada status tampilan. Oleh karena itu, tidak ada informasi yang tersedia untuk pengendali halaman .aspx guna menentukan peristiwa apa (jika ada) yang harus dipicu. Akibatnya, tidak ada penanganan aktivitas postback untuk halaman .aspx yang terpengaruh.
Untuk informasi tentang cara mengatasi masalah yang mungkin muncul sebagai akibat dari perubahan ini, lihat "Pengendali Acara Mungkin Tidak Dimunculkan dalam Dokumen Default dalam Mode Terpadu IIS 7 atau IIS 7.5" dalam dokumen ASP.NET 4 Perubahan Mendasar di situs Web ASP.NET.
Algoritma hashing ASP.NET menggunakan algoritma enkripsi dan hashing untuk membantu mengamankan data seperti cookie autentikasi formulir dan melihat status. Secara default, ASP.NET 4 menggunakan HMACSHA256 algoritma untuk operasi hash pada cookie dan melihat status. Versi ASP.NET yang lebih lama menggunakan algoritma HMACSHA1 lama. Jika Anda menjalankan aplikasi yang mencampur ASP.NET 2.0 dan ASP.NET 4, di mana data seperti cookie autentikasi formulir harus berfungsi di seluruh versi .NET Framework, konfigurasikan aplikasi Web ASP.NET 4 untuk menggunakan algoritma yang lebih HMACSHA1 lama dengan menambahkan pengaturan berikut dalam file Web.config:

<machineKey validation="SHA1" />
Kontrol hosting di Internet Explorer Anda tidak dapat lagi menghosting kontrol Windows Forms 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 mengonfigurasinya untuk berjalan di luar browser. Untuk informasi selengkapnya, lihat Dukungan Di Luar Browser.
* Anda dapat membangun aplikasi browser XAML (XBAP) untuk memanfaatkan kemampuan WPF (memerlukan .NET Framework pada komputer 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-tempat di mana Anda menggunakan HtmlEncode metode dan UrlEncode , dan pastikan bahwa perubahan pengodean tidak mengakibatkan perubahan yang akan memengaruhi aplikasi Anda.
Kesalahan HttpException dalam aplikasi ASP.NET 2.0 Setelah ASP.NET 4 diaktifkan pada IIS 6, aplikasi ASP.NET 2.0 yang berjalan pada IIS 6 (baik di Windows Server 2003 atau Windows Server 2003 R2) mungkin menghasilkan kesalahan seperti berikut: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. * Jika ASP.NET 4 tidak diperlukan untuk menjalankan situs Web, buat ulang situs untuk menggunakan ASP.NET 2.0 sebagai gantinya.

-atau-

* Jika ASP.NET 4 diperlukan untuk menjalankan situs Web, pindahkan setiap direktori virtual ASP.NET 2.0 anak ke situs Web lain yang telah dipetakan dengan ASP.NET 2.0.

-atau-

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

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

-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 dalam versi ASP.NET sebelumnya.
* Jika jalur di StaticPopOutImageUrl properti atau DynamicPopOutImageUrl berisi garis miring terbelakang (\), ganti karakter garis miring (/).
Perakitan bergerak dalam file Web.config Dalam versi ASP.NET sebelumnya, referensi ke rakitan System.Web.Mobile.dll disertakan dalam file Web.config root di bagian assemblies di bawahsystem.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 tipe dari majelis ini, tambahkan referensi ke majelis tersebut dalam file root Web.config atau dalam file aplikasi Web.config.
Output penembolokan Dalam ASP.NET 1.0, sebuah bug menyebabkan halaman cache yang menetapkan Location="ServerAndClient" sebagai pengaturan output-cache menghasilkan header HTTP Vary:* di dalam respons. Ini memiliki efek memberi tahu browser klien untuk tidak pernah menyimpan cache halaman secara lokal. Dalam ASP.NET 1.1, SetOmitVaryStar metode ditambahkan, yang dapat dipanggil untuk menekan Vary:* header. Namun, laporan bug menunjukkan bahwa pengembang tidak menyadari perilaku yang ada SetOmitVaryStar .

Dalam ASP.NET 4, header HTTP Vary:* tidak lagi dikeluarkan dari respons yang menyertakan arahan berikut:

<%@ OutputCache Location="ServerAndClient" %>

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

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

Atau, Anda dapat mengubah nilai atribut cache Location output menjadi "Server".
Penguraian halaman Pengurai halaman untuk halaman Web ASP.NET (file .aspx) dan kontrol pengguna (file.ascx) lebih ketat dalam 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 disertakan dalam ASP.NET 2.0 usang dan tidak didukung karena perubahan Paspor (sekarang Live ID SDK). Akibatnya, jenis yang terkait dengan Paspor di System.Web.Security sekarang diberi tanda atribut ObsoleteAttribute. Ubah kode apa pun yang menggunakan jenis Passport di System.Web.Security namespace (misalnya, PassportIdentity) menjadi menggunakan SDK Windows Live ID.
Informasi tentang PathInfo pada properti FilePath ASP.NET 4 tidak lagi menyertakan PathInfo nilai dalam nilai pengembalian 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 sebelumnya, HttpRequest properti memiliki nilai berikut:

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

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

* FilePath: /testapp/Action.mvc
* PathInfo: SomeAction
Periksa kode Anda untuk tempat-tempat di mana Anda mengandalkan HttpRequest properti kelas untuk mengembalikan informasi jalur; ubah kode untuk mencerminkan perubahan dalam cara informasi jalur dikembalikan.
Meminta validasi Untuk meningkatkan validasi permintaan, validasi permintaan ASP.NET dipanggil sebelumnya 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 ketika modul HTTP kustom berjalan dalam alur pemrosesan permintaan.

Akibat perubahan ini, permintaan sumber daya selain file .aspx mungkin melemparkan kesalahan validasi permintaan. Kode kustom yang berjalan dalam alur permintaan (misalnya, modul HTTP kustom) mungkin juga melemparkan kesalahan validasi permintaan.
Jika perlu, Anda dapat kembali ke perilaku lama karena hanya memiliki halaman .aspx yang memicu validasi permintaan dengan menggunakan pengaturan berikut dalam file konfigurasi Web:

<httpRuntime requestValidationMode="2.0" />

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

-atau-

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

-atau-

* Buat situs Web berbasis HTTP yang dihosting di IIS. Situs Web yang dihosting IIS dapat memiliki titik-titik di jalur virtual serta di folder file proyek.
Situs SharePoint Jika Anda mencoba menjalankan situs Web ASP.NET 4 yang disebarkan sebagai anak 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 anak 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 mematuhi XHTML 1.1. Penyajian ini diaktifkan menggunakan opsi berikut dalam elemen <system.Web> di file Web.config:

<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 direkomendasikan
CardSpace Windows CardSpace tidak lagi disertakan dalam .NET Framework; disediakan secara terpisah. Unduh Windows CardSpace dari Pusat Unduhan Microsoft.
File konfigurasi Koreksi telah dilakukan dalam cara .NET Framework mengakses file konfigurasi aplikasi. Jika file konfigurasi aplikasi Anda diberi nama application-name.config, ganti namanya menjadi application-name.exe.config. Misalnya, ganti nama MyApp.config menjadi MyApp.exe.config.
Pengkompilasi kode C# Kelas Compiler, CompilerError, dan ErrorLevel yang berada di Microsoft.CSharp namespace tidak lagi tersedia, dan perakitannya (cscompmgd.dll) tidak lagi disertakan dalam .NET Framework. Gunakan kelas CodeDomProvider dan kelas-kelas lainnya dalam System.CodeDom.Compiler ruang nama. Untuk informasi selengkapnya, lihat Menggunakan CodeDOM.
Hosting (API tidak terkelola) Untuk meningkatkan kemampuan hosting, beberapa API aktivasi hosting telah ditolak. 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 lama terus menggunakan versi .NET Framework yang lebih lama, dan komponen baru menggunakan versi .NET Framework baru. Gunakan konfigurasi yang dijelaskan dalam In-Process Eksekusi Berdampingan.
Model keamanan baru Kebijakan keamanan akses kode (CAS) telah dinonaktifkan 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

Assembly: mscorlib (dalam mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
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 yang sensitif terhadap budaya, struktur TimeSpan mencakup overload baru dari metode ToString, Parse, dan TryParse, selain metode baru ParseExact dan TryParseExact. Tidak ada.

Globalisasi

Untuk daftar budaya netral dan spesifik baru, lihat Apa yang Baru dalam Globalisasi dan Pelokalan.

Kumpulan nama XML: System.Globalization

Assembly: mscorlib (dalam mscorlib.dll)

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

* CurrencyEnglishName: Nama mata uang untuk budaya Jerman (Swiss) (de-CH) telah berubah dari "sFr." menjadi "Fr.".
* LongDatePattern: Pola tanggal panjang untuk budaya Divehi (Maladewa) (dv-MV) telah berubah dari "dd/MMMM/yyyy" menjadi "dd/MM/yyyy".
* PMDesignator: Penanda P.M. dari bahasa 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, menggunakan 1033 (en-us) untuk kultur. Tidak ada modifikasi yang diperlukan kecuali untuk aplikasi asli yang memerlukan budaya tertentu.
Jenis budaya usang Jenis budaya CultureTypes dan CultureTypes sekarang sudah usang.

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 CultureTypes enumerasi.
Mendapatkan budaya Dimulai dengan Windows 7, .NET Framework 4 mengambil informasi budaya dari sistem operasi alih-alih menyimpan data itu sendiri. Selain itu, .NET Framework disinkronkan dengan Windows untuk mengurutkan dan menyinggahkan data. Tidak ada.
Standar Unicode 5.1 .NET Framework sekarang mendukung semua karakter Unicode 5.1 -- penambahan sekitar 1400 karakter. Karakter tambahan termasuk simbol baru, panah, diakritik, tanda baca, simbol matematika, goresan karakter dan ideograf CJK, karakter numerik Malayalam dan Telugu tambahan, serta berbagai karakter Myanmar, Latin, Arab, Yunani, Mongolia, dan Sirilik. Naskah baru berikut didukung dengan Unicode 5.1: Karakter Sunda, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu, dan Malayalam dan Cham. Tidak ada.

Pengecualian

Namespace: System, System.Runtime.ExceptionServices

Assembly: mscorlib (dalam mscorlib.dll)

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

Untuk informasi lebih lanjut, lihat HandleProcessCorruptedStateExceptionsAttribute dan artikel Menangani Corrupted State Exceptions di majalah MSDN.
Pengecualian mesin eksekusi ExecutionEngineException sekarang usang, karena pengecualian yang dapat ditangkap akan memungkinkan proses yang tidak stabil untuk terus berjalan. Perubahan ini meningkatkan prediksi dan keandalan dalam runtime. Gunakan InvalidOperationException untuk mensinyalkan kondisi.

Refleksi

Kumpulan nama XML: System.Reflection

Assembly: mscorlib (dalam mscorlib.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
Algoritma hash perakitan Properti HashAlgorithm sekarang mengembalikan AssemblyHashAlgorithm, karena runtime tidak mengetahui algoritma hash dari assembly yang direferensikan ketika assembly tidak dimuat. (Ini mengacu pada penggunaan properti pada assembly 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 hanya dengan menggunakan fungsi Win32 MapViewOfFile . Ini tidak memanggil fungsi LoadLibrary lagi.

Perubahan ini memengaruhi aplikasi diagnostik dengan cara berikut:

* A ProcessModuleCollection tidak akan lagi berisi modul apa pun dari pustaka kelas (file.dll), seperti yang diperoleh dari panggilan ke Process.GetCurrentProcess().Modules.
* Aplikasi Win32 yang menggunakan EnumProcessModules fungsi tidak akan melihat semua modul terkelola tercantum.
Tidak ada.
Mendeklarasikan jenis Properti DeclaringType sekarang mengembalikan null dengan benar ketika jenis tidak memiliki tipe deklarasi. Tidak ada.
Delegasi Delegasi sekarang melemparkan ArgumentNullException alih-alih NullReferenceException ketika nilai null diteruskan ke konstruktor delegasi. Pastikan bahwa setiap penanganan pengecualian menangkap ArgumentNullException.
Perubahan lokasi cache rakitan 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 yang lebih lama.

Enumerasi ASM_CACHE_FLAGS yang tidak dikelola berisi bendera baru ASM_CACHE_ROOT_EX . Penanda ini mendapatkan lokasi cache untuk rakitan .NET Framework 4, yang dapat diperoleh menggunakan fungsi GetCachePath.
Tidak ada, dengan asumsi bahwa aplikasi tidak menggunakan jalur eksplisit ke assemblies, yang bukan praktik yang direkomendasikan.
Alat cache perakitan global Gacutil.exe (Global Assembly Cache Tool) tidak lagi mendukung penampil plugin shell. Tidak ada.

Interoperabilitas

Kumpulan nama XML: System.Runtime.InteropServices

Assembly: mscorlib (dalam mscorlib.dll)

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

* Anda tidak dapat lagi mendaftarkan dua debugger 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 menerima pemberitahuan ketika debugger gagal untuk memulai, atau ketika tidak ada debugger terdaftar yang seharusnya dijalankan.
* Kebijakan peluncuran otomatis yang bergantung pada interaktivitas aplikasi tidak lagi didukung.
Sesuaikan operasi debugging sesuai kebutuhan.
Pemanggilan platform Untuk meningkatkan performa dalam interoperabilitas dengan kode yang tidak dikelola, konvensi panggilan yang salah pada panggilan platform sekarang menyebabkan aplikasi mengalami kegagalan. Dalam versi sebelumnya, lapisan marshalling menyelesaikan kesalahan ini di tingkat yang lebih tinggi. Men-debug aplikasi Anda di Microsoft Visual Studio memberi tahu Anda tentang kesalahan ini sehingga Anda dapat memperbaikinya.

Jika Anda memiliki biner yang tidak dapat diperbarui, Anda dapat menyertakan <elemen NetFx40_PInvokeStackResilience> dalam file konfigurasi aplikasi Anda untuk memungkinkan kesalahan panggilan diselesaikan di sepanjang tumpukan seperti pada versi yang lebih lama. Namun, ini dapat memengaruhi performa aplikasi Anda.
Antarmuka yang dihapus (API tidak terkelola) Untuk menghindari kebingungan pengembang, antarmuka berikut dihapus, karena tidak memberikan skenario runtime yang berguna, dan CLR tidak menyediakan atau menerima implementasi apa pun:

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

Data Informasi

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 ADO.NET Data Services).

Himpunan Data dan Klien SQL

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

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

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

Fitur Perbedaan dari 3.5 SP1
Skenario POCO Antarmuka IRelatedEnd ini memiliki metode baru untuk meningkatkan kegunaannya dalam skenario Plain Old CLR Object (POCO). Metode baru ini mengambil Object alih-alih IEntityWithRelationships entitas sebagai parameter.
Mengedit Baris Metode IndexOf , seperti yang diimplementasikan oleh DataView kelas, sekarang dengan benar mengembalikan nilai baris yang sedang diedit, alih-alih mengembalikan -1.
Peristiwa Peristiwa PropertyChanged sekarang dipicu ketika baris dalam keadaan dimodifikasi, dan metode RejectChanges dipanggil. Perubahan ini memudahkan untuk membuat kontrol UI yang mengekspos konten DataSet objek.
Pengecualian Metode Prepare ini sekarang melemparkan InvalidOperationException ketika koneksi tidak diatur atau terbuka alih-alih NullReferenceException.
Tampilan Pemetaan Kesalahan pemetaan tampilan kueri sekarang dideteksi pada waktu desain daripada melemparkan NullReferenceException saat runtime.

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

Kerangka Kerja Entitas

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

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

Assembly: System.Data.Entity (dalam System.Data.Entity.dll)

Fitur Perbedaan dari 3.5 SP1
Objek entitas Sekarang ada paritas antara Detach metode dan status objek entitas ketika metode dipanggil SaveChanges . Konsistensi yang ditingkatkan ini mencegah pengecualian tak terduga muncul.
SQL Entitas Aturan telah ditingkatkan untuk resolusi pengidentifikasi di Entity SQL.

Pengurai SQL Entitas telah meningkatkan logika untuk menyelesaikan pengidentifikasi multibagian.
Anotasi struktural Kerangka Kerja Entitas sekarang mengenali anotasi struktural.
Pertanyaan Penyempurnaan berikut dilakukan dalam kueri:

* Kueri GroupBy yang menggunakan kunci null melalui 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 ini menjelaskan penyempurnaan fitur yang sebelumnya memiliki batasan atau masalah lainnya.

Kumpulan nama XML: System.Data.Linq

Assembly: System.Data.Linq (dalam System.Data.Linq.dll)

Fitur Perbedaan dari 3.5 SP1
Peristiwa Koleksi EntitySet<TEntity> sekarang menimbulkan ListChanged event untuk operasi penambahan dan penghapusan jika EntitySet<TEntity> tidak dimuat lagi, selain menimbulkan event saat koleksi dimuat.
Pertanyaan Skip(0) tidak lagi diabaikan dalam kueri LINQ ke SQL. Akibatnya, kueri yang memiliki metode ini mungkin berfungsi secara berbeda. Misalnya, dalam beberapa kasus, klausul OrderBy diperlukan dengan Skip(0), dan kueri sekarang akan mengeluarkan pengecualian NotSupportedException jika klausul OrderBy tidak disertakan.

Layanan Data WCF

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

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

Rakitan: System.Data.Services (dalam System.Data.Services.dll), System.Data.Services.Client (dalam System.Data.Services.Client.dll)

Fitur Perbedaan dari 3.5 SP1
Konten Biner yang Dikelompokkan WCF Data Services sekarang mendukung konten biner batch dalam permintaan dan respons.
Ganti penyaring Penyadap perubahan sekarang dijalankan untuk permintaan penghapusan.

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

* A TimeoutException ketika panggilan ke layanan data kehabisan waktu.
* A DataServiceRequestException ketika permintaan yang tidak valid dibuat ke layanan data.

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

* WCF Data Services sekarang dengan benar menolak eTag header yang memiliki nilai yang tidak ditentukan.
* WCF Data Services sekarang menghasilkan kesalahan dan tidak menjalankan permintaan untuk permintaan penghapusan tautan saat if-* header berada dalam permintaan.
* WCF Data Services sekarang mengembalikan kesalahan ke klien dalam format (Atom, JSON) yang ditentukan oleh klien di header Accept.
Pembaca JSON Mesin pembaca JavaScript Object Notation (JSON) sekarang dengan benar mengembalikan kesalahan ketika membaca karakter escape backslash tunggal ("\") saat memproses payload JSON yang dikirim ke WCF Data Service.
Gabungan Perbaikan berikut dilakukan pada MergeOption enumerasi:

* Opsi MergeOption penggabungan tidak lagi memodifikasi entitas pada klien sebagai hasil dari respons berikutnya dari layanan data.
* Opsi MergeOption sekarang konsisten antara SQL dinamis dan pembaruan berbasis prosedur tersimpan.
Permintaan Metode OnStartProcessingRequest ini 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 dasar untuk operasi baca dan tulis.
URI Pelepasan URI oleh klien WCF Data Services telah dikoreksi.

Windows Communication Foundation (WCF)

Tabel berikut ini menjelaskan penyempurnaan fitur yang sebelumnya memiliki batasan 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 pada tingkat hierarki yang berbeda.
Layanan hosting Anda tidak dapat lagi menentukan <serviceHostingEnvironment> elemen konfigurasi di tingkat layanan dengan menambahkan atribut allowDefinition="MachineToApplication" ke definisi elemen.

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

Windows Presentation Foundation (WPF)

Aplikasi

Namespace: System.Windows, System.Windows.Controls

Perakitan: PresentationFramework (dalam PresentationFramework.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
Penanganan pengecualian Untuk memungkinkan kesalahan terdeteksi lebih awal, WPF melempar 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, gunakan jalur lengkap file sumber daya alih-alih hanya nama filenya sebagai ID sumber daya saat aplikasi dibangun. Aplikasi akan dapat menemukan file saat runtime. Tidak ada.
Aplikasi kepercayaan parsial Untuk pertimbangan keamanan, aplikasi berbasis Windows yang berjalan dalam kepercayaan parsial dan berisi WebBrowser kontrol atau Frame kontrol yang berisi HTML akan melemparkan SecurityException ketika kontrol dibuat.

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

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

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

* Jalankan aplikasi browser dengan kepercayaan penuh.
* Minta pelanggan menambahkan situs aplikasi ke zona situs tepercaya.
Kamus sumber daya Untuk memperbaiki kamus sumber daya pada tingkat tema dan mencegah perubahan, sumber daya yang dapat dibekukan yang ditentukan dalam sebuah kamus sumber daya dan digabungkan ke dalam kamus pada tingkat tema kini 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 didefinisikan dalam kamus gabungan tingkat tema harus mengkloning sumber daya dan memodifikasi salinan kloning. Atau, 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, peningkatan berikut dilakukan untuk memperbaiki perilaku jendela:

* Status Dock dan gerakan sekarang berfungsi seperti yang diharapkan berdasarkan interaksi pengguna.
* Perintah taskbar jendela Cascade, Tampilkan jendela bertumpuk, dan Tampilkan 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 alih-alih nilai lain, tergantung pada monitor.
Tidak ada.
Gaya dan transparansi Windows InvalidOperationException akan dilemparkan jika Anda mencoba mengatur WindowStyle ke nilai selain WindowStyle ketika AllowsTransparency adalah true dan WindowState adalah WindowState. Jika Anda harus mengubah WindowStyle ketika AllowsTransparency adalah 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 .NET Framework 3.5 SP1 diinstal, mencetak dengan menggunakan API WPF selain yang ada di PrintDialog akan mengandalkan WINSPOOL. Beberapa kapabilitas printer tidak akan dilaporkan dan beberapa setelan pencetak tidak akan diterapkan selama pencetakan.
Jika diperlukan, instal Microsoft XML Paper Specification Essentials Pack.

Pengaturan

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

Komponen: PresentationFramework (di PresentationFramework.dll), PresentationCore (di PresentationCore.dll), WindowsBase (di WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
kotak Dialog Untuk meningkatkan keandalan, metode ShowDialog ini dipanggil pada utas yang sama yang membuat kontrol FileDialog. Pastikan untuk membuat kontrol FileDialog dan memanggil metode ShowDialog pada utas yang sama.
Jendela mengambang Untuk memperbaiki logika pemulihan fokus yang secara keliru terus-menerus mengaktifkan kembali jendela mengambang (menyebabkannya terlihat seperti kotak dialog modal), kini pemulihan fokus dicegah jika kandidat tidak termasuk dalam hierarki jendela tersebut. Tidak ada.
Item dalam koleksi Saat sebuah item dipindahkan atau ditambahkan ke koleksi yang mendasar, item tersebut akan muncul di CollectionView pada lokasi relatif yang sama jika CollectionView tidak diurutkan. Ini memberikan konsistensi antara posisi item dalam koleksi dan dalam CollectionView yang terkait. ContainerFromItem atau IndexOf gunakan untuk menemukan lokasi item di CollectionView alih-alih mengandalkan lokasi item yang tetap.
Layout Untuk menghilangkan pengaturan ulang tata letak yang tidak perlu, mengubah ShowsNavigationUI tidak lagi membatalkan tata letak atau menyebabkan pengaturan ulang tata letak lainnya. Jika Anda mengharapkan perubahan ShowsNavigationUI akan menyebabkan pengolahan tata letak lain, panggil InvalidateVisual setelah Anda menetapkan properti.
Menu Untuk mengaktifkan teks ClearType di pop-up menu, modifikasi dilakukan pada ControlTemplate kelas dan ke MenuItem kontrol dan kontrol lainnya. Aplikasi tidak boleh mengandalkan struktur visual templat kontrol. Hanya bagian bernama dari ControlTemplate yang merupakan bagian dari kontrak publik. Jika aplikasi harus menemukan objek tertentu dalam ControlTemplate, cari pohon visual untuk jenis tertentu alih-alih mengandalkan lokasi tetap objek di pohon.
Menavigasi Frame Jika Frame langsung menavigasi ke lokasi, properti true adalah setelah navigasi awal. Perubahan ini mencegah peristiwa tambahan dinaikkan selama skenario startup. Tidak ada.
Pop-up Delegasi CustomPopupPlacementCallback sekarang dapat dipanggil beberapa kali selama satu kali proses tata letak alih-alih hanya sekali. Jika delegasi Anda CustomPopupPlacementCallback menghitung posisi Popup berdasarkan posisinya sebelumnya, hitung ulang posisi hanya jika nilai popupSize, targetSize, atau offset berubah.
Nilai properti Metode SetCurrentValue sekarang memungkinkan Anda mengatur properti ke nilai yang efektif, namun tetap mempertahankan pengikatan, gaya, atau pemicu 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 ketika dipanggil dalam kepercayaan parsial.

Selain itu, eksekusi terprogram properti Copy atau Cut pada kontrol yang mewarisi dari TextBoxBase akan diblokir dalam kepercayaan parsial. Namun, perintah salin dan potong yang dimulai pengguna, seperti mengklik tombol yang propertinya Command terikat ke salah satu perintah ini, akan berfungsi. Penyalinan dan pemotongan standar melalui pintasan keyboard dan menu konteks akan tetap berfungsi seperti sebelumnya dalam kepercayaan parsial.
Kaitkan perintah Copy atau Cut dengan tindakan yang dilakukan pengguna, seperti mengklik tombol.

Grafik

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

Komponen: PresentationFramework (di PresentationFramework.dll), PresentationCore (di PresentationCore.dll), WindowsBase (di WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
Efek bitmap Untuk meningkatkan performa, BitmapEffect kelas dan kelas yang mewarisi dari BitmapEffect, dinonaktifkan meskipun masih ada. Efeknya akan dirender dengan menggunakan alur penyajian 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 shader 2.0.

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

Selain itu, Visual Studio menghasilkan peringatan kompilator saat menemukan BitmapEffect objek atau subkelas.

Metode PushEffect ini ditandai usang.
Menghentikan penggunaan kelas warisan BitmapEffect dan turunan dan sebaliknya menggunakan kelas baru yang berasal dari Effect: BlurEffect, , DropShadowEffectdan ShaderEffect.

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

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

* Anda berlangganan acara DownloadProgress, DownloadCompleted, atau DownloadFailed.
* Sumbernya BitmapFrame adalah dari Web.
* BitmapFrame dikloning saat unduhan masih berlangsung.
Periksa pengirim di penanganan aktivitas dan ambil tindakan hanya jika pengirim adalah asli .BitmapFrame
Mendekode gambar Untuk mencegah IOException tidak ditangani ketika gambar mungkin tidak didekode, kelas BitmapSource akan menaikkan acara DecodeFailed ketika gambar tidak didekode. Hapus penanganan pengecualian apa pun untuk IOException, dan gunakan DecodeFailed peristiwa untuk memeriksa kegagalan dekode.

Masukan

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

Komponen: PresentationFramework (di PresentationFramework.dll), PresentationCore (di PresentationCore.dll), WindowsBase (di WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
Menghubungkan contoh perintah Untuk menyediakan mekanisme untuk mengaitkan instance perintah yang berbasis View-Model ke gerakan input yang berbasis Tampilan, kelas InputBinding sekarang mewarisi dari Freezable bukan DependencyObject. Properti berikut sekarang adalah properti dependensi:

* Command
* CommandParameter
* CommandTarget

Perubahan ini menghasilkan hal berikut:

* Objek InputBinding sekarang dibekukan saat terdaftar, bukan tetap dapat diubah.
* Anda tidak dapat mengakses objek tingkat InputBinding instans dari beberapa utas, karena kelas DependencyObject memiliki pembatasan.
* Anda tidak dapat mengubah pengikatan input tingkat kelas setelah pendaftaran mereka, karena pembatasan dari kelas Freezable tersebut.
* Anda tidak dapat menentukan pengikatan input pada instans perintah yang dibuat dalam Model Tampilan.
Buat instans terpisah kelas InputBinding pada utas terpisah jika pengikatan dapat diubah, atau bekukan jika tidak. Jangan mengubah variabel statis tingkat kelas InputBinding setelah didaftarkan.
Aplikasi peramban Aplikasi Browser WPF (. XBAP) sekarang memproses peristiwa kunci seperti aplikasi WPF yang berdiri sendiri sehingga objek menerima peristiwa kunci yang dirutekan dalam urutan yang benar. Tidak ada.
Kombinasi tombol mati WPF mengaburkan kunci mati, yang tidak menghasilkan karakter yang terlihat, tetapi sebaliknya menunjukkan bahwa kunci tersebut akan dikombinasikan dengan kunci huruf berikutnya untuk menghasilkan satu karakter. Peristiwa masukan tombol, seperti peristiwa KeyDownEvent, melaporkan ketika sebuah tombol adalah tombol mati dengan menetapkan properti Key ke nilai Key. Ini biasanya perilaku yang diharapkan karena aplikasi biasanya tidak berniat merespons input keyboard yang membuat karakter gabungan. Aplikasi yang ingin membaca kunci yang merupakan bagian dari karakter gabungan dapat memperoleh kunci yang sekarang dikaburkan dengan menggunakan properti DeadCharProcessedKey.
Manajer fokus Ketika metode FocusManager.GetFocusedElement(DependencyObject) diteruskan elemen yang memiliki properti terpasang IsFocusScope diatur ke true, metode tersebut mengembalikan elemen yang merupakan elemen terakhir yang memiliki fokus pada keyboard dalam lingkup fokus tersebut, jika dan hanya jika elemen yang dikembalikan tersebut adalah bagian dari objek PresentationSource yang sama dengan elemen yang diteruskan ke metode. Tidak ada.

Otomatisasi UI

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

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

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
Hierarki tampilan kelas Kelas TreeViewAutomationPeer dan TreeViewItemAutomationPeer mewarisi dari ItemsControlAutomationPeer bukan FrameworkElementAutomationPeer. Jika Anda mewarisi dari TreeViewItemAutomationPeer kelas dan mengambil alih GetChildrenCore metode , pertimbangkan untuk mengembalikan objek yang mewarisi dari kelas baru TreeViewDataItemAutomationPeer .
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. Selain itu, nilai metode tidak dipengaruhi oleh oklusi oleh jendela lain, atau dengan apakah elemen terlihat pada monitor tertentu. Tidak ada.
Menu dan objek anak Untuk mengaktifkan otomatisasi UI dari menu yang berisi elemen selain objek MenuItem, metode GetChildrenCore sekarang mengembalikan objek AutomationPeer dari elemen anak UIElement, bukan sebuah objek MenuItemAutomationPeer. Tidak ada.
Antarmuka dan rakitan baru Untuk mengaktifkan fitur baru untuk otomatisasi UI, antarmuka berikut ditambahkan:

* IItemContainerProvider
* ISynchronizedInputProvider
* IVirtualizedItemProvider
Setiap proyek yang membangun peer otomatisasi WPF harus menambahkan referensi eksplisit ke UIAutomationProvider.dll.
Ibu Jari Metode GetClassNameCore mengembalikan nilai alih-alih null. Oleh karena itu, kontrol seperti GridSplitter yang mewarisi dari Thumb kelas akan melaporkan nama ke Automasi UI. Tidak ada.
Elemen tervirtualisasi Untuk meningkatkan performa, metode GetChildrenCore ini hanya mengembalikan objek turunan yang ada di pohon visual, alih-alih semua objek turunan, terlepas dari apakah objek tersebut divirtualisasi. Gunakan ItemContainerPattern untuk melakukan iterasi atas semua item ItemsControlAutomationPeer.

XAML

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

Komponen: PresentationFramework (di PresentationFramework.dll), PresentationCore (di PresentationCore.dll), WindowsBase (di WindowsBase.dll)

Fitur Perbedaan dari 3.5 SP1 Perubahan yang direkomendasikan
Ekstensi markup WPF sekarang dengan benar selalu menggunakan nilai dari metodeProvideValue alih-alih mengembalikan objekMarkupExtension dalam kasus tertentu ketika ekstensi markup digunakan untuk mengatur properti atau untuk membuat item dalam koleksi. Ekstensi markup mungkin mengembalikan nilainya sendiri dalam situasi tertentu. Jika aplikasi Anda mengakses sumber daya yang mengembalikan MarkupExtension objek di versi sebelumnya, referensikan objek yang dikembalikan dari ProvideValue, alih-alih MarkupExtension objek.
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)
Mengoreksi atribut XAML yang memiliki lebih dari satu periode.

XML

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

Skema dan transformasi

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

Assembly: System.Xml (dalam System.Xml.dll), System.Xml.Linq (dalam System.Xml.Linq.dll)

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

Skema chameleon adalah skema yang tidak memiliki target namespace, dan ketika disertakan dalam XSD lain, mereka mengambil namespace target dari skema yang mengimpornya. Mereka sering digunakan untuk memasukkan jenis umum ke dalam skema.
Fungsi ID Fungsi id XSLT sekarang mengembalikan nilai yang benar alih-alih null saat XmlReader objek 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 instance fungsi id di XSLT sebelumnya mengembalikan nol. Ini bukan nilai pengembalian yang diizinkan untuk fungsi.id
Atribut namespace Untuk mencegah kerusakan data, XPathNavigator objek sekarang dengan benar mengembalikan nama lokal atribut x:xmlns.
Deklarasi namespace Objek XmlReader pada subtree tidak lagi membuat deklarasi namespace duplikat dalam satu elemen XML.
Validasi skema Untuk mencegah validasi skema yang salah, XmlSchemaSet kelas memungkinkan skema XSD dikompilasi dengan benar dan konsisten. Skema ini dapat mencakup skema lain; misalnya, A.xsd dapat mencakup B.xsd, yang dapat mencakup C.xsd. Mengkompilasi salah satu dari elemen ini menyebabkan grafik ketergantungan ini dijelajahi.
Fungsi skrip Fungsi function-available tidak lagi salah mengembalikan false ketika fungsi tersebut benar-benar tersedia.
URI Metode Load ini sekarang mengembalikan BaseURI yang benar dalam kueri LINQ.

Validasi

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

Assembly: System.Xml (dalam System.Xml.dll), System.Xml.Linq (dalam System.Xml.Linq.dll)

Fitur Perbedaan dari 3.5 SP1
Pemecah masalah namespace Metode ReadContentAs tidak lagi mengabaikan resolver IXmlNamespaceResolver yang diteruskan kepadanya.

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

Validasi XML mengenali mode konten campuran, di mana teks dapat diintermiks dengan markup XML. Dalam mode campuran, semua spasi kosong signifikan dan harus dilaporkan.

Tulisan

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

Assembly: System.Xml (dalam System.Xml.dll), System.Xml.Linq (dalam System.Xml.Linq.dll)

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

Jika pengguna mencoba menulis entitas ke dalam atribut xmlns, xml:lang, atau xml:space dengan menggunakan metode WriteEntityRef, entitas tersebut diubah dua kali dalam output, sehingga merusak data.
Penanganan baris baru Untuk mencegah kerusakan data, objek XmlWriter mematuhi opsi NewLineHandling.

Lihat juga