Perubahan dalam .NET Framework 3.5 SP1
Dokumen ini menjelaskan perubahan desain yang mungkin perlu diperhitungkan di aplikasi atau lingkungan Anda saat Anda meningkatkan dari .NET Framework versi 3.5 ke .NET Framework versi 3.5 Paket Layanan 1 (SP1).
Perubahan terjadi karena beberapa alasan termasuk perbaikan untuk masalah produk, kepatuhan standar, umpan balik pelanggan, dan keamanan. Topik ini hanya menjelaskan perubahan penting. Untuk informasi tentang fitur baru, lihat Apa yang Baru di .NET Framework . Untuk memberikan umpan balik, silakan kunjungi Pusat Umpan Balik Produk MSDN.
Bagian berikut menjelaskan perubahan yang dibuat dalam .NET Framework versi 3.5 SP1.
Runtime Bahasa Umum
Peningkatan Performa Aplikasi sekarang menggunakan Pencegahan Eksekusi Data untuk mencegah upaya menyisipkan dan menjalankan kode dari lokasi memori yang tidak dapat dieksekusi. Keamanan untuk eksekusi kode terkelola (termasuk rakitan MSIL, gambar NGen, dan kode yang tidak dikelola) di-bolster oleh Address Space Layout Randomization (ASLR). Rakitan yang ditandatangani dengan nama kuat tidak perlu lagi memeriksa tanda tangan mereka pada waktu pemuatan asalkan mereka sepenuhnya dipercaya dan dimuat ke dalam domain aplikasi yang sepenuhnya tepercaya. Perubahan ini menghilangkan pemeriksaan redundan dan meningkatkan performa startup aplikasi yang telah menandatangani rakitan tetapi tidak diinstal di Global Assembly Cache (GAC). Aplikasi yang diluncurkan dari berbagi jaringan memiliki perilaku yang sama dengan executable yang tidak dikelola dan beroperasi dengan kepercayaan penuh dibandingkan dengan kepercayaan parsial. Atribut Inliner kompilator just-in-time (JIT) telah ditingkatkan secara signifikan untuk menghasilkan kode kualitas yang lebih baik. Namun, mengubah inliner berdampak pada aplikasi yang memiliki kelas yang dibuat dengan konstruktor yang menggunakan nilai enumerasi TypeAttributes.BeforeFieldInit. Inisialisasi statis dari jenis ini dijamin terjadi pada satu waktu sebelum salah satu bidang statis diakses, tetapi tidak sebelum metode statis atau konstruktor instans dipanggil. Waktu yang tepat ketika konstruktor kelas dipanggil dapat berbeda dalam .NET Framework versi 3.5 dan 3.5 SP1. Perubahan kompilator JIT lainnya termasuk perubahan pada kesalahan pembulatan floating-point dan perubahan waktu finalizer. Tidak diperlukan modifikasi. |
ADO.NET
metode CanConvertToString pada kelas Value Serializer Metode System.Data.SqlClient.SQLDataReader.GetString dan oth er Dapatkan metode melempar InvalidCastException jika data tidak dapat dilemparkan ke jenis yang diminta. Pesan sekarang menyertakan jenisnya, seperti: "Tidak dapat melemparkan objek jenis 'System.Decimal' untuk mengetik 'System.String'". Tidak diperlukan modifikasi. |
SQLDataReader.GetString pada kolom UDT Memanggil metode SQLDataReader.GetString pada kolom User Defined Type (UDT) sekarang melempar InvalidCastException alih-alih pesan kesalahan "Cast tidak didukung dari Byte[] ke String". Tidak diperlukan modifikasi. |
C#
Kueri melalui koleksi non-generik sekarang menggunakan semantik cast C# standar. Dalam ekspresi kueri LINQ atas koleksi non-generik seperti System.Collections.ArrayList , klausul dari kueri ditulis ulang oleh pengkompilasi untuk menyertakan panggilan ke operator Cast<T>. Cast<T> mengonversi semua jenis elemen ke jenis yang ditentukan dalam klausa from dalam kueri. Selain itu, dalam versi rilis asli Visual C# 2008, operator Cast<T> juga melakukan beberapa konversi jenis nilai dan konversi yang ditentukan pengguna. Namun, konversi ini dilakukan dengan menggunakan kelas System.Convert alih-alih semantik C# standar. Konversi ini juga menyebabkan masalah performa yang signifikan dalam skenario tertentu. Di Visual C# 2008 SP1, operator Cast<T> dimodifikasi untuk melempar InvalidCastException untuk jenis nilai numerik dan konversi yang ditentukan pengguna. Perubahan ini menghilangkan semantik pemeran C# non-standar dan masalah performa. Perubahan ini diilustrasikan dalam contoh berikut.
Modifikasi yang disarankan: Jika Anda memiliki kode yang melakukan kueri LINQ melalui koleksi non-generik, dan kode tersebut sekarang melemparkan pengecualian, ubah jenis ekspresi kueri agar sesuai dengan jenis elemen dalam koleksi yang Anda kueri. Jika Anda perlu melakukan konversi jenis nilai atau yang ditentukan pengguna pada elemen, Anda dapat melakukan ini saat menjalankan kueri, seperti yang ditunjukkan dalam contoh berikut:
|
ASP.NET, IIS
Mode Terintegrasi IIS Pada mode Integrasi untuk Internet Information Services (IIS) 7.0, metode HttpServerUtility.TransferRequest salah menggunakan metode HTTPResponse.End untuk menghentikan permintaan induk. Ini menghasilkan ThreadAbortException , yang dapat memengaruhi performa untuk mengakhiri eksekusi respons. Dalam .NET Framework 3.5 SP1, metode TransferRequest sekarang mengakhiri permintaan induk dengan menggunakan metode HttpApplication.CompleteRequest. Ini juga mengakhiri permintaan saat ini dengan baik dengan mentransfer kontrol ke HttpApplication.EndRequest penanganan aktivitas tanpa melemparkan pengecualian. Modifikasi yang disarankan: Jika Anda memiliki kode penanganan kesalahan yang menggunakan metode |
autentikasi Windows Terintegrasi Perubahan keamanan memengaruhi bagaimana autentikasi Windows terintegrasi ditangani oleh System.Net.HttpWebRequest , System.Net.HttpListener , System.Net.Security.NegotiateStream , dan kelas terkait di namespace System.Net. Perubahan ini dapat memengaruhi server Web dan aplikasi klien yang dikonfigurasi untuk menggunakan autentikasi Windows terintegrasi. Proses autentikasi Microsoft Windows NT LAN Manager (NTLM) yang digunakan dengan autentikasi Windows terintegrasi mencakup tantangan yang dikeluarkan oleh komputer tujuan yang dikirim kembali ke komputer klien. Ketika komputer menerima tantangan yang dihasilkannya sendiri, autentikasi akan gagal kecuali koneksi adalah koneksi loop back (misalnya, alamat IPv4 127.0.0.1). Kelas HttpWebRequest sekarang default untuk menentukan Nama host yang digunakan dalam URL permintaan di Nama Prinsipal Layanan (SPN) yang digunakan dalam proses autentikasi NTLM. Modifikasi yang Disarankan: Anda dapat menyediakan SPN kustom untuk digunakan selama autentikasi ke kamus string yang diindeks oleh URI. Kamus ini diperoleh dengan properti
|
CDOSYS Kelas di namespace System.Web.Mail mengandalkan Objek Data Kolaborasi untuk komponen Windows 2000, yang tidak akan tersedia di versi Windows berikutnya (Windows 7). Akibatnya, menggunakan kelas-kelas ini di Windows 7 akan melempar PlatformNotSupportedException . Modifikasi yang disarankan: System.Web.Mail tidak digunakan lagi dalam .NET Framework versi 2.0. Gunakan dukungan email di namespace System.Net.Mail |
validasi permintaan ASP.NET validasi permintaan sekarang mencakup pemeriksaan tanda kurung sudut kiri dan urutan karakter tanda tanya: Modifikasi su ggested: Dampak perubahan ini harus minimal karena biasanya tidak ada alasan untuk komentar XML disertakan dalam string kueri variabel cookie. |
validasi URL ASP.NET sekarang memvalidasi bagian URL saat diakses dari halaman ASP.NET. Namun, ketika penulisan ulang URL digunakan, dimungkinkan untuk mengakses url versi lama di halaman dengan properti Request.RawUrl Modifikasi yang Disarankan: Nonaktifkan validasi pada halaman, jika perlu. |
status Sesi Penyedia status sesi diharapkan untuk mengimplementasikan semua anggota yang ditentukan pada kelas Dengan rilis .NET Framework 3.5 SP1, metode CreateUninitializedItem sekarang juga dapat dipanggil dalam keadaan tertentu ketika status sesi cookie sedang digunakan. Modifikasi yang disarankan: Terapkan CreateUninitializedItem |
pengodean URL ASP.NET sekarang memperluas pengodean URL header HTTP keluar untuk menyertakan karakter hapus (7F) dan semua karakter kontrol ASCII (kecuali tab horizontal). Modifikasi yang Disarankan: Jika diperlukan, Anda dapat menonaktifkan perilaku pengodean header default sebagai berikut:
|
DefaultHTTPHandler di IIS Meskipun kelas System.Web.DefaultHTTPHandler untuk aplikasi mode terintegrasi dibuat sebagai modul usang di IIS 7.0, masih mungkin digunakan. Sekarang memberikan pengecualian PlatformNotSupported. Modifikasi yang Disarankan: Ubah konfigurasi aplikasi agar berfungsi dengan baik dalam mode Terintegrasi. |
Server dan konsistensi pemformatan nomor klien Perilaku pemformatan fungsi
Sebelum .NET Framework 3.5 SP1, kode berikut akan mengembalikan
Sekarang, localeFormat mengembalikan Tidak diperlukan modifikasi. |
ASP.NET bidang tersembunyi Bidang ASP.NET tersembunyi, seperti Modifikasi yang disarankan: Saya perlu, Anda dapat menonaktifkan perilaku ini dengan mengatur atribut baru renderAllHiddenFieldsAtTopOfForm ke false: Nilai defaultnya adalah true. |
Windows Presentation Foundation (WPF)
kelas BitmapEffect usang Kelas System.Windows.Media.Effects.BitmapEffect, dan kelas turunannya (BevelBitmapEffect, BitmapEffectGroup, BlurBitmapEffect, DropShadowBitmapEffect, EmbossBitmapEffect, dan OuterGlowBitmapEffect), sekarang usang. Modifikasi yang disarankan: Hentikan penggunaan bitmapEffect Anda juga dapat membuat efek Anda sendiri dengan berasal dari ShaderEffect. |
perubahan nama Rakitan Rakitan yang berisi lapisan penyajian inti WPF telah diganti namanya dari milcore.dll menjadi wpfgfx_v0300.dll. Rakitan ini belum pernah memiliki API publik. Tidak diperlukan modifikasi. |
perilaku Hyperlink Jika nilai properti Hyperlink.NavigateUri berubah antara waktu saat pengguna mengarahkan kursor mouse ke hyperlink dan waktu saat pengguna mengklik hyperlink tersebut, navigasi akan terjadi menggunakan URI yang diperoleh saat kursor mengarahkan kursor ke hyperlink. Tidak diperlukan modifikasi. |
Internet Explorer dalam Mode Terlindungi di Windows Vista Ketika Internet Explorer dalam Mode Terproteksi pada Windows Vista, dialog modal dari fungsi Tidak diperlukan modifikasi. |
metode CanConvertToString pada kelas Value Serializer Metode Tidak diperlukan modifikasi. |
Windows Communication Foundation (WCF) dan Windows Workflow Foundation (WF)
pencocokan Skema Skema pencocokan skema yang digunakan oleh kelas UriTemplate dan UriTemplateTable telah dilonggarkan untuk menerima alamat dasar dengan skema selain HTTP. Sekarang tidak satu pun dari kelas ini menggunakan skema atau nomor port saat mencocokkan URI kandidat dengan templat. Dukungan templat untuk garis miring berikutnya dan nilai default telah ditambahkan. Tidak diperlukan modifikasi. |
Peningkatan keamanan untuk autentikasi Saat layanan berjalan di bawah akun pengguna dengan keamanan mode campuran, EndPointIdentity harus memiliki identitas nama prinsipal pengguna (UPN). Ini tidak diperlukan dengan versi WCF yang lebih lama. Modifikasi yang disarankan: Saat klien diatur untuk menggunakan pengaturan SecurityMode.TransportWithMessageCredential (menggunakan autentikasi Windows, autentikasi UPN, atau autentikasi thumbprint), buat instans kelas EndPointAddress dengan identitas UPN dan berikan kode kustom untuk menangani verifikasi thumbprint apa pun. |
Dukungan kepercayaan parsial untuk pengelogan peristiwa Kepercayaan parsial sekarang mendukung pengelogan peristiwa terbatas. Hanya kesalahan aktivasi layanan, kegagalan pelacakan, dan kegagalan pengelogan yang dicatat ke Log Peristiwa. Untuk menghindari penulisan pesan berlebihan ke Log Peristiwa, jumlah maksimum peristiwa yang dapat dicatat oleh proses adalah 5. Tidak diperlukan modifikasi. |
ketersediaan RemoteEndpointMessageProperty Mengakses instans kelas Tidak diperlukan modifikasi. |
Catatan: Untuk mengatasi masalah akhir yang sangat penting bagi beberapa aplikasi, Microsoft berencana untuk memberikan pembaruan ke NET Framework 3.5 SP1 yang mungkin disertakan dalam Windows Update penting. Informasi selengkapnya tentang pembaruan ini akan tersedia di halaman unduhan .NET Framework 3.5 SP1 di Pusat Unduhan Microsoft.
Lihat Juga
versi .NET Framework dan Informasi Assembly