Apa yang baru di .NET Framework

Catatan

.NET Framework 4.8 adalah versi terakhir dari .NET Framework. .NET Framework dilayankan setiap bulan dengan perbaikan bug keamanan dan keandalan. .NET Framework akan terus disertakan dengan Windows, tanpa rencana untuk menghapusnya. Anda tidak perlu memigrasikan aplikasi .NET Framework Anda, tetapi untuk pengembangan baru, gunakan .NET 5 atau yang lebih baru.

Artikel ini merangkum kunci fitur dan peningkatan baru dalam versi .NET Framework berikut:

Artikel ini tidak memberikan informasi komprehensif tentang setiap fitur baru dan dapat berubah. Untuk informasi umum tentang .NET Framework, lihat Memulai. Untuk platform yang didukung, lihat Persyaratan Sistem. Untuk tautan unduhan dan instruksi penginstalan, lihat Panduan Penginstalan.

Catatan

Tim .NET Framework juga merilis fitur di luar band, menggunakan NuGet, untuk memperluas dukungan platform dan memperkenalkan fungsionalitas baru, seperti koleksi yang tidak dapat diubah dan jenis vektor berkemampuan SIMD. Untuk informasi selengkapnya, lihat Pustaka dan API Kelas Tambahan serta rilis .NET Framework dan Out-of-Band. Lihat daftar lengkap paket NuGet untuk .NET Framework.

Memperkenalkan .NET 4.8

.NET Framework 4.8 dibangun pada versi .NET Framework 4.x sebelumnya dengan menambahkan banyak perbaikan baru dan beberapa fitur baru sambil tetap menjadi produk yang sangat stabil.

Unduh dan pasang .NET Framework 4.8

Anda dapat mengunduh .NET Framework 4.8 dari lokasi berikut:

.NET Framework 4.8 dapat dipasang pada Windows 10, Windows 8.1, Windows 7 SP1, dan platform server yang sesuai dimulai dengan Windows Server 2008 R2 SP1. Anda dapat memasang .NET Framework 4.8 dengan menggunakan penginstal web atau penginstal offline. Cara yang disarankan bagi sebagian besar pengguna adalah dengan menggunakan alat penginstal web.

Anda dapat menargetkan .NET Framework 4.8 di Visual Studio 2012 atau yang lebih baru dengan memasang Paket Pengembang .NET Framework 4.8.

Apa yang baru dalam .NET Framework 4.8

.NET Framework 4.8 memperkenalkan fitur baru di area berikut:

Peningkatan aksesibilitas, yang memungkinkan aplikasi untuk memberikan pengalaman yang sesuai bagi pengguna Teknologi Bantuan, terus menjadi fokus utama .NET Framework 4.8. Untuk informasi tentang peningkatan aksesibilitas di .NET Framework 4.8, lihat Apa yang baru dalam aksesibilitas di .NET Framework.

Kelas dasar

Mengurangi dampak FIPS pada Kriptografi. Dalam versi .NET Framework sebelumnya, kelas penyedia kriptografi terkelola seperti SHA256Managed melemparkan CryptographicException ketika pustaka kriptografi sistem dikonfigurasi dalam "mode FIPS". Pengecualian ini dilemparkan karena versi terkelola dari kelas penyedia kriptografi, tidak seperti pustaka kriptografi sistem, belum menjalani sertifikasi FIPS (Standar Pemrosesan Informasi Federal) 140-2. Karena beberapa pengembang memiliki mesin pengembangan mereka dalam mode FIPS, pengecualian umumnya dilemparkan dalam sistem produksi.

Secara default dalam aplikasi yang menargetkan .NET Framework 4.8, kelas kriptografi terkelola berikut tidak lagi melemparkan CryptographicException dalam kasus ini:

Sebaliknya, kelas-kelas ini mengalihkan operasi kriptografi ke pustaka kriptografi sistem. Perubahan ini secara efektif menghapus perbedaan yang berpotensi membingungkan antara lingkungan pengembang dan lingkungan produksi dan membuat komponen asli dan komponen terkelola beroperasi di bawah kebijakan kriptografi yang sama. Aplikasi yang bergantung pada pengecualian ini dapat memulihkan perilaku sebelumnya dengan mengatur sakelar AppContext Switch.System.Security.Cryptography.UseLegacyFipsThrow ke true. Untuk informasi selengkapnya, lihat Kelas kriptografi terkelola tidak melemparkan CryptographyException dalam mode FIPS.

Penggunaan versi ZLib yang diperbarui

Dimulai dengan .NET Framework 4.5, rakitan clrcompression.dll menggunakan ZLib, pustaka eksternal asli untuk kompresi data, untuk menyediakan implementasi untuk algoritma deflate. Versi clrcompression.dll .NET Framework 4.8 diperbarui untuk menggunakan ZLib Versi 1.2.11, yang mencakup beberapa peningkatan dan perbaikan utama.

Yayasan Komunikasi Windows (WCF)

Pengantar ServiceHealthBehavior

Titik akhir kesehatan banyak digunakan oleh alat orkestrasi untuk mengelola layanan berdasarkan status kesehatannya. Pemeriksaan kesehatan juga dapat digunakan oleh alat pemantauan untuk melacak dan memberikan pemberitahuan tentang ketersediaan dan performa layanan.

ServiceHealthBehavior adalah perilaku layanan WCF yang memperluas IServiceBehavior. Saat ditambahkan ke ServiceDescription.Behaviors koleksi, perilaku layanan melakukan hal berikut:

  • Mengembalikan status kesehatan layanan dengan kode respons HTTP. Anda dapat menentukan dalam string kueri kode status HTTP untuk permintaan pemeriksaan kesehatan HTTP/GET.

  • Menerbitkan informasi tentang kesehatan layanan. Detail khusus layanan, termasuk status layanan, jumlah pembatasan, dan kapasitas dapat ditampilkan dengan menggunakan permintaan HTTP/GET dengan ?health string kueri. Kemudahan akses ke informasi tersebut penting saat memecahkan masalah layanan WCF yang tidak beres.

Ada dua cara untuk mengekspos titik akhir kesehatan dan menerbitkan informasi kesehatan layanan WCF:

  • Melalui kode. Contohnya:

    ServiceHost host = new ServiceHost(typeof(Service1),
                       new Uri("http://contoso:81/Service1"));
    ServiceHealthBehavior healthBehavior =
        host.Description.Behaviors.Find<ServiceHealthBehavior>();
    healthBehavior ??= new ServiceHealthBehavior();
    host.Description.Behaviors.Add(healthBehavior);
    
    Dim host As New ServiceHost(GetType(Service1),
                New Uri("http://contoso:81/Service1"))
    Dim healthBehavior As ServiceHealthBehavior =
       host.Description.Behaviors.Find(Of ServiceHealthBehavior)()
    If healthBehavior Is Nothing Then
       healthBehavior = New ServiceHealthBehavior()
    End If
    host.Description.Behaviors.Add(healthBehavior)
    
  • Dengan menggunakan file konfigurasi. Contohnya:

    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceHealth httpsGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    

Status kesehatan layanan dapat dikueri dengan menggunakan parameter kueri seperti OnServiceFailure, OnDispatcherFailure, OnListenerFailureOnThrottlePercentExceeded), dan kode respons HTTP dapat ditentukan untuk setiap parameter kueri. Jika kode respons HTTP dihilangkan untuk parameter kueri, kode respons HTTP 503 digunakan secara default. Contohnya:

Parameter dan contoh kueri:

  • OnDispatcherFailure: https://contoso:81/Service1?health&OnDispatcherFailure=455

    Kode status respons HTTP 455 dikembalikan ketika status salah satu dispatcher saluran lebih besar dari CommunicationState.Opened.

  • OnListenerFailure: https://contoso:81/Service1?health&OnListenerFailure=465

    Kode status respons HTTP 465 dikembalikan ketika status salah satu dispatcher saluran lebih besar dari CommunicationState.Opened.

  • OnThrottlePercentExceeded: https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500

    Menentukan persentase {1 – 100} yang memicu respons dan kode respons HTTPnya {200 – 599}. Dalam contoh ini:

    • Jika persentase lebih besar dari 95, kode respons HTTP 500 dikembalikan.

    • Jika persentasenya antara 70 dan 95, 350 dikembalikan.

    • Jika tidak, 200 dikembalikan.

Status kesehatan layanan dapat ditampilkan baik dalam HTML dengan menentukan string kueri seperti https://contoso:81/Service1?health atau di XML dengan menentukan string kueri seperti https://contoso:81/Service1?health&Xml. String kueri seperti https://contoso:81/Service1?health&NoContent mengembalikan halaman HTML kosong.

Windows Presentation Foundation (WPF)

Peningkatan DPI tinggi

Dalam .NET Framework 4.8, WPF menambahkan dukungan untuk Per-Monitor V2 DPI Awareness dan penskalaan DPI Mixed-Mode. Lihat Pengembangan Aplikasi Desktop DPI Tinggi di Windows untuk informasi tambahan tentang pengembangan DPI tinggi.

.NET Framework 4.8 meningkatkan dukungan untuk interoperasi HWND dan Formulir Windows di aplikasi WPF DPI Tinggi pada platform yang mendukung penskalaan DPI Mixed-Mode (dimulai dengan pembaruan Windows 10 April 2018). Ketika kontrol HWND atau Formulir Windows yang dihosting dibuat sebagai jendela Mixed-Mode berskala DPI dengan memanggil SetThreadDpiHostingBehavior dan SetThreadDpiAwarenessContext, mereka dapat dihosting dalam aplikasi Per-Monitor V2 WPF dan berukuran dan diskalakan dengan tepat. Konten yang dihosting tersebut tidak dirender di DPI asli; sebaliknya, sistem operasi menskalakan konten yang dihosting ke ukuran yang sesuai. Dukungan untuk mode kesadaran DPI Per-Monitor v2 juga memungkinkan kontrol WPF dihosting (yaitu, induk) di jendela asli dalam aplikasi DPI tinggi.

Untuk mengaktifkan dukungan untuk penskalaan DPI Tinggi Mixed-Mode, Anda dapat mengatur AppContext berikut mengalihkan file konfigurasi aplikasi:

<runtime>
   <AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>

Runtime bahasa umum

Runtime dalam .NET Framework 4.8 mencakup perubahan dan peningkatan berikut:

Peningkatan pada kompilator JIT. Kompilator Just-in-time (JIT) di .NET Framework 4.8 didasarkan pada kompilator JIT di .NET Core 2.1. Banyak pengoptimalan dan semua perbaikan bug yang dilakukan pada kompilator JIT .NET Core 2.1 disertakan dalam kompilator JIT .NET Framework 4.8.

Peningkatan NGEN Runtime telah meningkatkan manajemen memorinya untuk Native Image Generator gambar (NGEN) sehingga data yang dipetakan dari gambar NGEN tidak bersifat residen memori. Ini mengurangi area permukaan yang tersedia untuk serangan yang mencoba menjalankan kode arbitrer dengan memodifikasi memori yang akan dijalankan.

Pemindaian antimalware untuk semua rakitan. Dalam versi .NET Framework sebelumnya, runtime memindai semua rakitan yang dimuat dari disk menggunakan perangkat lunak antimalware Pertahanan Windows atau pihak ketiga. Namun, rakitan yang dimuat dari sumber lain, seperti dengan Assembly.Load(Byte[]) metode, tidak dipindai dan berpotensi mengandung malware yang tidak terdeteksi. Dimulai dengan .NET Framework 4.8 yang berjalan pada Windows 10, runtime memicu pemindaian oleh solusi antimalware yang mengimplementasikan Antimalware Scan Interface (AMSI).

Apa yang baru dalam .NET Framework 4.7.2

.NET Framework 4.7.2 mencakup fitur-fitur baru di bidang-bidang berikut:

Fokus berkelanjutan dalam .NET Framework 4.7.2 adalah aksesibilitas yang ditingkatkan, yang memungkinkan aplikasi untuk memberikan pengalaman yang sesuai bagi pengguna Teknologi Bantuan. Untuk informasi tentang peningkatan aksesibilitas di .NET Framework 4.7.2, lihat Apa yang baru dalam aksesibilitas di .NET Framework.

Kelas dasar

.NET Framework 4.7.2 memiliki sejumlah besar peningkatan kriptografi, dukungan dekompresi yang lebih baik untuk arsip ZIP, dan API pengumpulan tambahan.

Kelebihan beban baru RSA.Create dan DSA.Create

Metode DSA.Create(DSAParameters) dan RSA.Create(RSAParameters) memungkinkan Anda menyediakan parameter kunci saat membuat instans kunci atau DSA baruRSA. Mereka memungkinkan Anda untuk mengganti kode seperti berikut:

// Before .NET Framework 4.7.2
using (RSA rsa = RSA.Create())
{
   rsa.ImportParameters(rsaParameters);
   // Other code to execute using the RSA instance.
}
' Before .NET Framework 4.7.2
Using rsa = RSA.Create()
   rsa.ImportParameters(rsaParameters)
   ' Other code to execute using the rsa instance.
End Using

dengan kode seperti ini:

// Starting with .NET Framework 4.7.2
using (RSA rsa = RSA.Create(rsaParameters))
{
   // Other code to execute using the rsa instance.
}
' Starting with .NET Framework 4.7.2
Using rsa = RSA.Create(rsaParameters)
   ' Other code to execute using the rsa instance.
End Using

Metode DSA.Create(Int32) dan RSA.Create(Int32) memungkinkan Anda menghasilkan kunci DSA atau RSA baru dengan ukuran kunci tertentu. Contohnya:

using (DSA dsa = DSA.Create(2048))
{
   // Other code to execute using the dsa instance.
}
Using dsa = DSA.Create(2048)
   ' Other code to execute using the dsa instance.
End Using

Konstruktor Rfc2898DeriveBytes menerima nama algoritma hash

Kelas Rfc2898DeriveBytes ini memiliki tiga konstruktor baru dengan HashAlgorithmName parameter yang mengidentifikasi algoritma HMAC untuk digunakan saat mengambil kunci. Alih-alih menggunakan SHA-1, pengembang harus menggunakan HMAC berbasis SHA-2 seperti SHA-256, seperti yang ditunjukkan dalam contoh berikut:

private static byte[] DeriveKey(string password, out int iterations, out byte[] salt,
                                out HashAlgorithmName algorithm)
{
   iterations = 100000;
   algorithm = HashAlgorithmName.SHA256;

   const int SaltSize = 32;
   const int DerivedValueSize = 32;

   using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, SaltSize,
                                                             iterations, algorithm))
   {
      salt = pbkdf2.Salt;
      return pbkdf2.GetBytes(DerivedValueSize);
   }
}
Private Shared Function DeriveKey(password As String, ByRef iterations As Integer,
                                  ByRef salt AS Byte(), ByRef algorithm As HashAlgorithmName) As Byte()
   iterations = 100000
   algorithm = HashAlgorithmName.SHA256

   Const SaltSize As Integer = 32
   Const  DerivedValueSize As Integer = 32

   Using pbkdf2 = New Rfc2898DeriveBytes(password, SaltSize, iterations, algorithm)
      salt = pbkdf2.Salt
      Return pbkdf2.GetBytes(DerivedValueSize)
   End Using
End Function

Dukungan untuk kunci ephemeral

Impor PFX dapat secara opsional memuat kunci privat langsung dari memori, melewati hard drive. Ketika bendera baru X509KeyStorageFlags.EphemeralKeySet ditentukan dalam X509Certificate2 konstruktor atau salah satu kelebihan beban X509Certificate2.Import metode, kunci privat akan dimuat sebagai kunci ephemeral. Ini mencegah kunci terlihat pada disk. Akan tetapi:

  • Karena kunci tidak dipertahankan ke disk, sertifikat yang dimuat dengan bendera ini bukan kandidat yang baik untuk ditambahkan ke X509Store.

  • Kunci yang dimuat dengan cara ini hampir selalu dimuat melalui Windows CNG. Oleh karena itu, penelepon harus mengakses kunci privat dengan memanggil metode ekstensi, seperti cert.GetRSAPrivateKey(). Properti X509Certificate2.PrivateKey tidak berfungsi.

  • Karena properti warisan X509Certificate2.PrivateKey tidak berfungsi dengan sertifikat, pengembang harus melakukan pengujian ketat sebelum beralih ke kunci ephemeral.

Pembuatan program permintaan penandatanganan sertifikasi PKCS #10 dan sertifikat kunci umum X.509

Dimulai dengan .NET Framework 4.7.2, beban kerja dapat menghasilkan permintaan penandatanganan sertifikat (CSR), yang memungkinkan pembuatan permintaan sertifikat dipentaskan ke alat yang ada. Ini sering berguna dalam skenario pengujian.

Untuk informasi selengkapnya dan contoh kode, lihat "Pembuatan terprogram permintaan penandatanganan sertifikasi PKCS#10 dan sertifikat kunci umum X.509" di Blog .NET.

Anggota SignerInfo baru

Dimulai dengan .NET Framework 4.7.2, SignerInfo kelas mengekspos informasi lebih lanjut tentang tanda tangan. Anda dapat mengambil nilai System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm properti untuk menentukan algoritma tanda tangan yang digunakan oleh penanda tangan. SignerInfo.GetSignature dapat dipanggil untuk mendapatkan salinan tanda tangan kriptografi untuk penanda tangan ini.

Membiarkan aliran yang dibungkus terbuka setelah CryptoStream dibuang

Dimulai dengan .NET Framework 4.7.2, CryptoStream kelas memiliki konstruktor tambahan yang memungkinkan Dispose untuk tidak menutup aliran yang dibungkus. Untuk membiarkan aliran yang dibungkus terbuka setelah CryptoStream instans dibuang, panggil konstruktor baru CryptoStream sebagai berikut:

var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)

Perubahan dekompresi dalam DeflateStream

Dimulai dengan .NET Framework 4.7.2, implementasi operasi dekompresi di DeflateStream kelas telah berubah menjadi menggunakan API Windows asli secara default. Biasanya, cara ini menghasilkan peningkatan performa yang substansial.

Dukungan untuk dekompresi dengan menggunakan API Windows diaktifkan secara default untuk aplikasi yang menargetkan .NET Framework 4.7.2. Aplikasi yang menargetkan versi .NET Framework sebelumnya tetapi berjalan di bawah .NET Framework 4.7.2 dapat memilih perilaku ini dengan menambahkan sakelar AppContext berikut ke file konfigurasi aplikasi:

<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />

API koleksi tambahan

.NET Framework 4.7.2 menambahkan sejumlah API baru ke jenis SortedSet<T> dan HashSet<T> . Ini termasuk:

Kelas ConcurrentDictionary<TKey,TValue> mencakup kelebihan beban baru dari metode AddOrUpdate dan GetOrAdd untuk mengambil nilai dari kamus atau untuk menambahkannya jika tidak ditemukan, dan untuk menambahkan nilai ke kamus atau memperbaruinya jika sudah ada.

public TValue AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, TValue> addValueFactory, Func<TKey, TValue, TArg, TValue> updateValueFactory, TArg factoryArgument)

public TValue GetOrAdd<TArg>(TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)
Public AddOrUpdate(Of TArg)(key As TKey, addValueFactory As Func(Of TKey, TArg, TValue), updateValueFactory As Func(Of TKey, TValue, TArg, TValue), factoryArgument As TArg) As TValue

Public GetOrAdd(Of TArg)(key As TKey, valueFactory As Func(Of TKey, TArg, TValue), factoryArgument As TArg) As TValue

ASP.NET

Dukungan untuk injeksi dependensi dalam Formulir Web

Injeksi dependensi (DI) memisahkan objek dan dependensinya sehingga kode objek tidak perlu lagi diubah hanya karena dependensi telah berubah. Saat mengembangkan aplikasi ASP.NET yang menargetkan .NET Framework 4.7.2, Anda dapat:

Dukungan untuk cookie situs yang sama

SameSite mencegah browser mengirim cookie bersama dengan permintaan lintas situs. .NET Framework 4.7.2 menambahkan HttpCookie.SameSite properti yang nilainya adalah System.Web.SameSiteMode anggota enumerasi. Jika nilainya adalah SameSiteMode.Strict atau SameSiteMode.Lax, ASP.NET menambahkan SameSite atribut ke header set-cookie. Dukungan SameSite berlaku untuk HttpCookie objek, serta cookie FormsAuthentication dan System.Web.SessionState.

Anda dapat mengatur SameSite untuk HttpCookie objek sebagai berikut:

var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;
Dim c As New HttpCookie("secureCookie", "same origin")
c.SameSite = SameSiteMode.Lax

Anda juga dapat mengonfigurasi cookie SameSite di tingkat aplikasi dengan memodifikasi file web.config:

<system.web>
   <httpCookies sameSite="Strict" />
</system.web>

Anda dapat menambahkan SameSite untuk cookie FormsAuthentication dan System.Web.SessionState dengan memodifikasi file konfigurasi web:

<system.web>
   <authentication mode="Forms">
      <forms cookieSameSite="Lax">
         <!-- ...   -->
      </forms>
   </authentication>
   <sessionState cookieSameSite="Lax"></sessionState>
</system.web>

Jaringan

Implementasi properti HttpClientHandler

.NET Framework 4.7.1 menambahkan delapan properti ke System.Net.Http.HttpClientHandler kelas . Namun, dua melemparkan PlatformNotSupportedException. .NET Framework 4.7.2 sekarang menyediakan implementasi untuk properti ini. Propertinya adalah:

SQLClient

Dukungan untuk autentikasi Azure Active Directory Universal dan Autentikasi Multifaktor

Meningkatnya permintaan kepatuhan dan keamanan mengharuskan banyak pelanggan menggunakan autentikasi multifaktor (MFA). Selain itu, praktik terbaik saat ini mencegah pencamtuman kata sandi pengguna secara langsung dalam string koneksi. Untuk mendukung perubahan ini, .NET Framework 4.7.2 memperluas string koneksi SQLClient dengan menambahkan nilai baru, "Active Directory Interactive", untuk kata kunci "Autentikasi" yang ada untuk mendukung MFA dan Autentikasi Azure AD. Metode interaktif baru mendukung pengguna Azure AD asli dan terfederasi serta pengguna tamu Azure AD. Ketika metode ini digunakan, autentikasi MFA yang diberlakukan oleh Azure AD didukung untuk database SQL. Selain itu, proses autentikasi meminta kata sandi pengguna untuk mematuhi praktik terbaik keamanan.

Di versi .NET Framework sebelumnya, SQL konektivitas hanya mendukung opsi SqlAuthenticationMethod.ActiveDirectoryPassword dan SqlAuthenticationMethod.ActiveDirectoryIntegrated . Keduanya adalah bagian dari protokol ADAL non-interaktif, yang tidak mendukung MFA. Dengan opsi baru SqlAuthenticationMethod.ActiveDirectoryInteractive, konektivitas SQL mendukung MFA serta metode autentikasi yang ada (kata sandi dan autentikasi terintegrasi), yang memungkinkan pengguna memasukkan kata sandi pengguna secara interaktif tanpa menyimpan kata sandi dalam string koneksi.

Untuk informasi selengkapnya dan contohnya, lihat "SQL -- Azure AD Dukungan Autentikasi Universal dan Multifaktor" di Blog .NET.

Dukungan untuk Always Encrypted versi 2

NET Framework 4.7.2 menambahkan dukungan untuk Always Encrypted berbasis enklave. Versi asli Always Encrypted adalah teknologi enkripsi sisi klien di mana kunci enkripsi tidak pernah meninggalkan klien. Dalam Always Encrypted berbasis enklave, klien dapat secara opsional mengirim kunci enkripsi ke enklave aman, yang merupakan entitas komputasi aman yang dapat dianggap sebagai bagian dari SQL Server tetapi kode SQL Server tidak dapat diubah. Untuk mendukung Always Encrypted berbasis enklave, .NET Framework 4.7.2 menambahkan jenis dan anggota berikut ke System.Data.SqlClient namespace:

File konfigurasi aplikasi kemudian menentukan implementasi konkret dari kelas abstrak System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider yang menyediakan fungsionalitas untuk penyedia enklave. Contohnya:

<configuration>
  <configSections>
    <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
  </configSections>
  <SqlColumnEncryptionEnclaveProviders>
    <providers>
      <add name="Azure" type="Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp"/>
      <add name="HGS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp" />
    </providers>
  </SqlColumnEncryptionEnclaveProviders >
</configuration>

Aliran dasar Always Encrypted berbasis enklave adalah:

  1. Pengguna membuat koneksi AlwaysEncrypted ke SQL Server yang mendukung Always Encrypted berbasis enklave. Driver menghubungi layanan pengesahan untuk memastikan bahwa driver terhubung ke enklave yang tepat.

  2. Setelah enklave diuji, driver membuat saluran aman dengan enklave aman yang dihosting di SQL Server.

  3. Driver berbagi kunci enkripsi yang diotorisasi oleh klien dengan enklave aman selama durasi koneksi SQL.

Windows Presentation Foundation

Menemukan ResourceDictionaries berdasarkan Sumber

Dimulai dengan .NET Framework 4.7.2, asisten diagnostik dapat menemukan ResourceDictionaries yang telah dibuat dari Uri sumber tertentu. (Fitur ini digunakan oleh asisten diagnostik, bukan oleh aplikasi produksi.) Asisten diagnostik seperti fasilitas "Edit dan Lanjutkan" Visual Studio memungkinkan penggunanya mengedit ResourceDictionary dengan niat bahwa perubahan diterapkan ke aplikasi yang sedang berjalan. Salah satu langkah dalam mencapai hal ini adalah menemukan semua ResourceDictionaries yang telah dibuat aplikasi yang sedang berjalan dari kamus yang sedang diedit. Misalnya, aplikasi dapat mendeklarasikan ResourceDictionary yang kontennya disalin dari URI sumber tertentu:

<ResourceDictionary Source="MyRD.xaml" />

Asisten diagnostik yang mengedit markup asli di MyRD.xaml dapat menggunakan fitur baru untuk menemukan kamus. Fitur ini diimplementasikan oleh metode statik baru, ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. Asisten diagnostik memanggil metode baru menggunakan Uri absolut yang mengidentifikasi markup asli, seperti yang diilustrasikan oleh kode berikut:

IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));
Dim dictionaries As IEnumerable(Of ResourceDictionary) = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(New Uri("pack://application:,,,/MyApp;component/MyRD.xaml"))

Metode mengembalikan enumerable kosong kecuali VisualDiagnostics diaktifkan dan ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO variabel lingkungan diatur.

Menemukan pemilik ResourceDictionary

Dimulai dengan .NET Framework 4.7.2, asisten diagnostik dapat menemukan pemilik tertentuResourceDictionary. (Fitur ini untuk digunakan oleh asisten diagnostik dan bukan oleh aplikasi produksi.) Setiap kali perubahan dilakukan pada ResourceDictionary, WPF secara otomatis menemukan semua referensi DynamicResource yang mungkin terpengaruh oleh perubahan.

Asisten diagnostik seperti fasilitas "Edit dan Lanjutkan" Visual Studio mungkin ingin memperluas ini untuk menangani referensi StaticResource. Langkah pertama dalam proses ini adalah menemukan pemilik kamus; yaitu, untuk menemukan semua objek yang propertinya Resources mengacu pada kamus (baik secara langsung, atau tidak langsung melalui ResourceDictionary.MergedDictionaries properti ). Tiga metode statik baru yang diterapkan pada kelas System.Windows.Diagnostics.ResourceDictionaryDiagnostics, satu untuk masing-masing jenis dasar yang memiliki Resources properti, mendukung langkah ini:

Metode mengembalikan enumerable kosong kecuali VisualDiagnostics diaktifkan dan ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO variabel lingkungan diatur.

Menemukan referensi StaticResource

Asisten diagnostik sekarang dapat menerima pemberitahuan setiap kali referensi StaticResource diselesaikan. (Fitur ini untuk digunakan oleh asisten diagnostik, bukan oleh aplikasi produksi.) Asisten diagnostik seperti fasilitas "Edit dan Lanjutkan" Visual Studio mungkin ingin memperbarui semua penggunaan sumber daya saat nilainya berubahResourceDictionary. WPF melakukan ini secara otomatis untuk referensi DynamicResource, tetapi sengaja tidak melakukannya untuk referensi StaticResource. Dimulai dengan .NET Framework 4.7.2, asisten diagnostik dapat menggunakan pemberitahuan ini untuk menemukan penggunaan sumber daya statis tersebut.

Pemberitahuan diimplementasikan oleh peristiwa baru ResourceDictionaryDiagnostics.StaticResourceResolved :

public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)

Peristiwa ini dinaikkan setiap kali runtime menyelesaikan referensi StaticResource. Argumen StaticResourceResolvedEventArgs menjelaskan resolusi, dan menunjukkan objek dan properti yang menghosting referensi StaticResource dan ResourceDictionary kunci dan yang digunakan untuk resolusi:

public class StaticResourceResolvedEventArgs : EventArgs
{
   public Object TargetObject { get; }

   public Object TargetProperty { get; }

   public ResourceDictionary ResourceDictionary { get; }

   public object ResourceKey { get; }
}
Public Class StaticResourceResolvedEventArgs : Inherits EventArgs
   Public ReadOnly Property TargetObject As Object
   Public ReadOnly Property TargetProperty As Object
   Public ReadOnly Property ResourceDictionary As ResourceDictionary
   Public ReadOnly Property ResourceKey As Object
End Class

Peristiwa tidak dinaikkan (dan pengaktif add diabaikan) kecuali VisualDiagnostics diaktifkan dan ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO variabel lingkungan diatur.

ClickOnce

Aplikasi sadar HDPI untuk Formulir Windows, Windows Presentation Foundation (WPF), dan Visual Studio Tools for Office (VSTO) semuanya dapat disebarkan dengan menggunakan ClickOnce. Jika entri berikut ditemukan dalam manifes aplikasi, penyebaran akan berhasil di bawah .NET Framework 4.7.2:

<windowsSettings>
   <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>

Untuk aplikasi Formulir Windows, solusi sebelumnya untuk mengatur kesadaran DPI dalam file konfigurasi aplikasi daripada manifes aplikasi tidak lagi diperlukan agar penyebaran ClickOnce berhasil.

Apa yang baru dalam .NET Framework 4.7.1

.NET Framework 4.7.1 mencakup fitur-fitur baru di bidang-bidang berikut:

Selain itu, fokus utama dalam .NET Framework 4.7.1 adalah peningkatan aksesibilitas, yang memungkinkan aplikasi untuk memberikan pengalaman yang tepat bagi pengguna Teknologi Bantuan. Untuk informasi tentang peningkatan aksesibilitas di .NET Framework 4.7.1, lihat Apa yang baru dalam aksesibilitas di .NET Framework.

Kelas dasar

Dukungan untuk .NET Standard 2.0

.NET Standard mendefinisikan sekumpulan API yang harus tersedia pada setiap implementasi .NET yang mendukung versi standar tersebut. .NET Framework 4.7.1 sepenuhnya mendukung .NET Standard 2.0 dan menambahkan sekitar 200 API yang ditentukan dalam .NET Standard 2.0 dan hilang dari .NET Framework 4.6.1, 4.6.2, dan 4.7. (Perhatikan bahwa versi .NET Framework ini mendukung .NET Standard 2.0 hanya jika file dukungan .NET Standard tambahan juga disebarkan pada sistem target.) Untuk informasi selengkapnya, lihat "Dukungan BCL - .NET Standard 2.0" di posting blog .NET Framework 4.7.1 Runtime dan Fitur Kompilator.

Dukungan untuk penyusun konfigurasi

Penyusun konfigurasi memungkinkan pengembang untuk menyuntikkan dan membangun pengaturan konfigurasi untuk aplikasi secara dinamis pada durasi. Penyusun konfigurasi kustom dapat digunakan untuk memodifikasi data yang ada di bagian konfigurasi atau untuk membangun bagian konfigurasi sepenuhnya dari awal. Tanpa penyusun konfigurasi, .config file menjadi statik, dan pengaturannya ditentukan beberapa waktu sebelum aplikasi diluncurkan.

Untuk membuat penyusun konfigurasi kustom, Anda memperoleh penyusun dari kelas abstrak ConfigurationBuilder dan mengambil alih ConfigurationBuilder.ProcessConfigurationSection dan ConfigurationBuilder.ProcessRawXml. Anda juga menentukan penyusun dalam file .config Anda. Untuk informasi selengkapnya, lihat bagian "Penyusun Konfigurasi" di posting blog .NET Framework 4.7.1 ASP.NET dan Fitur Konfigurasi.

Deteksi fitur run-time

Kelas System.Runtime.CompilerServices.RuntimeFeature menyediakan mekanisme untuk menentukan apakah fitur yang telah ditentukan sebelumnya didukung pada implementasi .NET tertentu pada waktu kompilasi atau durasi. Pada waktu kompilasi, kompilator dapat memeriksa apakah ada bidang tertentu untuk menentukan apakah fitur tersebut didukung; jika demikian, itu dapat memancarkan kode yang memanfaatkan fitur itu. Pada durasi, aplikasi dapat memanggil RuntimeFeature.IsSupported metode sebelum memancarkan kode pada durasi. Untuk informasi selengkapnya, lihat Menambahkan metode pembantu untuk menjelaskan fitur yang didukung oleh runtime.

Jenis tuple nilai dapat diserialisasikan

Dimulai dengan .NET Framework 4.7.1, System.ValueTuple dan jenis generik terkait ditandai sebagai Serializable, yang memungkinkan serialisasi biner. Ini harus membuat migrasi jenis Tuple, seperti Tuple<T1,T2,T3> dan Tuple<T1,T2,T3,T4>, untuk nilai jenis tuple lebih mudah. Untuk informasi selengkapnya, lihat "Kompilator -- ValueTuple dapat diserialisasi" di posting blog .NET Framework 4.7.1 Runtime dan Fitur Kompilator.

Dukungan untuk referensi baca-saja

.NET Framework 4.7.1 menambahkan System.Runtime.CompilerServices.IsReadOnlyAttribute. Atribut ini digunakan oleh kompilator bahasa untuk menandai anggota yang memiliki jenis atau parameter pengembalian ref baca-saja. Untuk informasi selengkapnya, lihat "Kompilator -- Dukungan untuk ReadOnlyReferences" di posting blog .NET Framework 4.7.1 Runtime dan Fitur Kompilator. Untuk informasi tentang nilai pengembalian ref, lihat Nilai pengembalian ref dan lokal ref (Panduan C#) dan nilai pengembalian Ref (Visual Basic).

Runtime bahasa umum (CLR)

Peningkatan performa pengumpulan sampah

Perubahan pengumpulan sampah (GC) di .NET Framework 4.7.1 meningkatkan performa keseluruhan, terutama untuk alokasi tumpukan objek besar (LOH). Dalam .NET Framework 4.7.1, kunci terpisah digunakan untuk alokasi tumpukan objek kecil (SOH) dan LOH, yang memungkinkan alokasi LOH terjadi ketika GC latar belakang menyapu SOH. Akibatnya, aplikasi yang membuat sejumlah besar alokasi LOH akan melihat pengurangan ketidakcocokan kunci alokasi dan peningkatan performa. Untuk informasi selengkapnya, lihat bagian "Runtime -- Peningkatan Performa GC" di posting blog .NET Framework 4.7.1 Runtime dan Fitur Kompilator.

Jaringan

Dukungan SHA-2 untuk Message.HashAlgorithm

Di .NET Framework 4.7 dan versi yang lebih lama, properti Message.HashAlgorithm mendukung nilai HashAlgorithm.Md5 dan HashAlgorithm.Sha saja. Dimulai dengan .NET Framework 4.7.1, HashAlgorithm.Sha256, HashAlgorithm.Sha384, dan HashAlgorithm.Sha512 juga didukung. Apakah nilai ini benar-benar digunakan tergantung pada MSMQ, karena instans Message itu sendiri tidak melakukan hashing tetapi hanya meneruskan nilai ke MSMQ. Untuk informasi selengkapnya, lihat bagian "Dukungan SHA-2 untuk Message.HashAlgorithm" di posting blog fitur .NET Framework 4.7.1 ASP.NET dan fitur Konfigurasi.

ASP.NET

Langkah-langkah eksekusi dalam aplikasi ASP.NET

ASP.NET memproses permintaan dalam alur yang telah ditentukan sebelumnya yang mencakup 23 peristiwa. ASP.NET menjalankan setiap penanganan aktivitas sebagai langkah eksekusi. Dalam versi ASP.NET hingga .NET Framework 4.7, ASP.NET tidak dapat mengalirkan konteks eksekusi karena beralih antara utas asli dan terkelola. Sebaliknya, ASP.NET secara selektif hanya mengalirkan HttpContext. Dimulai dengan .NET Framework 4.7.1, metode ini HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) juga memungkinkan modul untuk memulihkan data sekitar. Fitur ini ditargetkan pada pustaka yang berkaitan dengan pelacakan, pembuatan profil, diagnostik, atau transaksi, misalnya, yang peduli dengan alur eksekusi aplikasi. Untuk informasi selengkapnya, lihat "Fitur Langkah Eksekusi ASP.NET" di posting blog ASP.NET .NET Framework 4.7.1 dan Fitur Konfigurasi .

Penguraian HttpCookie ASP.NET

.NET Framework 4.7.1 menyertakan metode baru, HttpCookie.TryParse, yang menyediakan cara standar untuk membuat HttpCookie objek dari string dan menetapkan nilai cookie secara akurat seperti tanggal dan jalur kedaluwarsa. Untuk informasi selengkapnya, lihat "Penguraian ASP.NET HttpCookie" di posting blog ASP.NET .NET Framework 4.7.1 dan Fitur Konfigurasi.

Opsi hash SHA-2 untuk kredensial autentikasi formulir ASP.NET

Dalam .NET Framework 4.7 dan versi yang lebih lama, ASP.NET memungkinkan pengembang untuk menyimpan kredensial pengguna dengan kata sandi yang di-hash dalam file konfigurasi menggunakan MD5 atau SHA1. Dimulai dengan .NET Framework 4.7.1, ASP.NET juga mendukung opsi hash SHA-2 aman baru seperti SHA256, SHA384, dan SHA512. SHA1 tetap menjadi default, dan algoritma hash non-default dapat ditentukan dalam file konfigurasi web. Contohnya:

<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/login.aspx">
          <credentials passwordFormat="SHA512">
            <user name="jdoe" password="6D003E98EA1C7F04ABF8FCB375388907B7F3EE06F278DB966BE960E7CBBD103DF30CA6D61F7E7FD981B2E4E3A64D43C836A4BEDCA165C33B163E6BCDC538A664" />
          </credentials>
        </forms>
    </authentication>
</system.web>

Apa yang baru dalam .NET Framework 4.7

.NET Framework 4.7 mencakup fitur-fitur baru di bidang-bidang berikut:

Untuk daftar API baru yang ditambahkan ke .NET Framework 4.7, lihat Perubahan .NET Framework API 4.7 di GitHub. Untuk daftar peningkatan fitur dan perbaikan bug di .NET Framework 4.7, lihat Daftar Perubahan .NET Framework 4.7 di GitHub. Untuk informasi selengkapnya, lihat Mengumumkan .NET Framework 4.7 di blog .NET.

Kelas dasar

.NET Framework 4.7 meningkatkan serialisasi dengan DataContractJsonSerializer:

Fungsionalitas yang disempurnakan dengan Elliptic Curve Cryptography (ECC)*

Dalam .NET Framework 4.7, ImportParameters(ECParameters) metode ditambahkan ke kelas ECDsa dan ECDiffieHellman untuk memungkinkan objek mewakili kunci yang sudah dibuat. Metode ExportParameters(Boolean) juga ditambahkan untuk mengekspor kunci menggunakan parameter kurva eksplisit.

.NET Framework 4.7 juga menambahkan dukungan untuk kurva tambahan (termasuk rangkaian kurva Brainpool), dan telah menambahkan definisi yang telah ditentukan sebelumnya untuk kemudahan pembuatan melalui metode pabrik baru Create dan Create.

Anda dapat melihat contoh peningkatan kriptografi .NET Framework 4.7 pada GitHub.

Dukungan yang lebih baik untuk karakter kontrol oleh DataContractJsonSerializer

Dalam .NET Framework 4.7, DataContractJsonSerializer kelas menserialisasikan karakter kontrol sesuai dengan standar ECMAScript 6. Perilaku ini diaktifkan secara default untuk aplikasi yang menargetkan .NET Framework 4.7, dan merupakan fitur keikutsertaan untuk aplikasi yang berjalan di bawah .NET Framework 4.7 tetapi menargetkan versi .NET Framework sebelumnya. Untuk informasi selengkapnya, lihat bagian Kompatibilitas aplikasi.

Jaringan

.NET Framework 4.7 menambahkan fitur terkait jaringan berikut:

Dukungan sistem operasi default untuk protokol TLS*

Tumpukan TLS, yang digunakan oleh System.Net.Security.SslStream dan komponen up-stack seperti HTTP, FTP, dan SMTP, memungkinkan pengembang untuk menggunakan protokol TLS default yang didukung oleh sistem operasi. Pengembang tidak perlu lagi membuat kode keras versi TLS.

ASP.NET

Di .NET Framework 4.7, ASP.NET menyertakan fitur baru berikut:

Ekstensibilitas Cache Objek

Dimulai dengan .NET Framework 4.7, ASP.NET menambahkan serangkaian API baru yang memungkinkan pengembang mengganti implementasi ASP.NET default untuk penembolokan objek dalam memori dan pemantauan memori. Pengembang sekarang dapat mengganti salah satu dari tiga komponen berikut jika implementasi ASP.NET tidak memadai:

  • Penyimpanan Cache Objek. Dengan menggunakan bagian konfigurasi penyedia cache baru, pengembang dapat menyambungkan implementasi baru cache objek untuk aplikasi ASP.NET dengan menggunakan antarmuka ICacheStoreProvider baru.

  • Pemantauan memori. Monitor memori default di ASP.NET memberi tahu aplikasi ketika mereka berjalan dekat dengan batas byte privat yang dikonfigurasi untuk proses, atau ketika total RAM fisik yang tersedia pada mesin rendah. Ketika mendekati batas, pemberitahuan akan diaktifkan. Untuk beberapa aplikasi, pemberitahuan diaktifkan terlalu dekat dengan batas yang dikonfigurasi untuk memungkinkan reaksi yang berguna. Pengembang sekarang dapat menulis monitor memori mereka sendiri untuk menggantikan default dengan menggunakan ApplicationMonitors.MemoryMonitor properti.

  • Reaksi Batas Memori. Secara default, ASP.NET mencoba memangkas cache objek dan secara berkala memanggil GC.Collect ketika mendekati batas proses byte privat. Untuk beberapa aplikasi, frekuensi panggilan ke GC.Collect atau jumlah cache yang dipangkas tidak efisien. Pengembang sekarang dapat mengganti atau melengkapi perilaku default dengan berlangganan implementasi IObserver ke monitor memori aplikasi.

Yayasan Komunikasi Windows (WCF)

Windows Communication Foundation (WCF) menambahkan fitur dan perubahan berikut:

Kemampuan untuk mengonfigurasi pengaturan keamanan pesan default ke TLS 1.1 atau TLS 1.2

Dimulai dengan .NET Framework 4.7, WCF memungkinkan Anda mengonfigurasi TLS 1.1 atau TLS 1.2 selain SSL 3.0 dan TLS 1.0 sebagai protokol keamanan pesan default. Ini adalah pengaturan keikutsertaan; untuk mengaktifkannya, Anda harus menambahkan entri berikut ke file konfigurasi aplikasi Anda:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>

Peningkatan keandalan aplikasi WCF dan serialisasi WCF

WCF mencakup sejumlah perubahan kode yang menghilangkan kondisi balapan, sehingga meningkatkan performa dan keandalan opsi serialisasi. Ini termasuk:

  • Dukungan yang lebih baik untuk mencampur kode asinkron dan sinkron dalam panggilan ke SocketConnection.BeginRead dan SocketConnection.Read.
  • Peningkatan keandalan saat membatalkan koneksi dengan SharedConnectionListener dan DuplexChannelBinder.
  • Peningkatan keandalan operasi serialisasi saat memanggil FormatterServices.GetSerializableMembers(Type) metode.
  • Peningkatan keandalan saat menghapus pelayan dengan memanggil metode ChannelSynchronizer.RemoveWaiter.

Formulir Windows

Dalam .NET Framework 4.7, Formulir Windows meningkatkan dukungan untuk monitor DPI tinggi.

Dukungan DPI tinggi

Dimulai dengan aplikasi yang menargetkan .NET Framework 4.7, .NET Framework fitur DPI tinggi dan dukungan DPI dinamis untuk aplikasi Formulir Windows. Dukungan DPI tinggi meningkatkan tata letak dan tampilan formulir dan kontrol pada monitor DPI tinggi. DPI dinamis mengubah tata letak dan tampilan formulir dan kontrol ketika pengguna mengubah DPI atau menampilkan faktor skala aplikasi yang sedang berjalan.

Dukungan DPI tinggi adalah fitur keikutsertaan yang Anda konfigurasi dengan menentukan <System.Windows.Forms.ConfigurationSection> dalam file konfigurasi aplikasi Anda. Untuk informasi selengkapnya tentang menambahkan dukungan DPI tinggi dan dukungan DPI dinamis ke aplikasi Formulir Windows Anda, lihat Dukungan DPI Tinggi di Formulir Windows.

Windows Presentation Foundation (WPF)

Dalam .NET Framework 4.7, WPF menyertakan peningkatan berikut:

Dukungan untuk tumpukan sentuh/stylus berdasarkan pesan Windows WM_POINTER

Anda sekarang memiliki opsi untuk menggunakan tumpukan sentuh/stylus berdasarkan pesan WM_POINTER, bukan Windows Ink Services Platform (WISP). Ini adalah fitur keikutsertaan dalam .NET Framework. Untuk informasi selengkapnya, lihat bagian Kompatibilitas aplikasi.

Implementasi baru untuk API pencetakan WPF

API pencetakan WPF di System.Printing.PrintQueue kelas memanggil API Paket Dokumen Cetak Windows alih-alih API Cetak XPSyang tidak digunakan lagi. Untuk dampak perubahan ini pada kompatibilitas aplikasi, lihat bagian Kompatibilitas aplikasi.

Apa yang baru dalam .NET Framework 4.6.2

.NET Framework 4.6.2 mencakup fitur-fitur baru di bidang-bidang berikut:

Untuk daftar API baru yang ditambahkan ke .NET Framework 4.6.2, lihat Perubahan API .NET Framework 4.6.2 di GitHub. Untuk daftar peningkatan fitur dan perbaikan bug di .NET Framework 4.6.2, lihat Daftar Perubahan .NET Framework 4.6.2 di GitHub. Untuk informasi selengkapnya, lihat Mengumumkan .NET Framework 4.6.2 di blog .NET.

ASP.NET

Dalam .NET Framework 4.6.2, WPF menyertakan peningkatan berikut:

Dukungan yang disempurnakan untuk pesan kesalahan yang dilokalkan dalam validator anotasi data

Validator anotasi data memungkinkan Anda melakukan validasi dengan menambahkan satu atau beberapa atribut ke properti kelas. Elemen atribut ValidationAttribute.ErrorMessage menentukan teks pesan kesalahan jika validasi gagal. Dimulai dengan .NET Framework 4.6.2, ASP.NET memudahkan untuk melokalisasi pesan kesalahan. Pesan kesalahan akan dilokalkan jika:

  1. ValidationAttribute.ErrorMessage disediakan dalam atribut validasi.

  2. File sumber daya disimpan di folder App_LocalResources.

  3. Nama file sumber daya yang dilokalkan memiliki nama DataAnnotation.Localization.{formulir}.resx, di mana nama adalah nama budaya dalam format languageCode-country/regionCode atau languageCode.

  4. Nama kunci sumber daya adalah string yang ditetapkan ke atribut ValidationAttribute.ErrorMessage, dan nilainya adalah pesan kesalahan yang dilokalkan.

Misalnya, atribut anotasi data berikut menentukan pesan kesalahan budaya default untuk peringkat yang tidak valid.

public class RatingInfo
{
   [Required(ErrorMessage = "The rating must be between 1 and 10.")]
   [Display(Name = "Your Rating")]
   public int Rating { get; set; }
}
Public Class RatingInfo
   <Required(ErrorMessage = "The rating must be between 1 and 10.")>
   <Display(Name = "Your Rating")>
   Public Property Rating As Integer = 1
End Class

Anda kemudian dapat membuat file sumber daya, DataAnnotation.Localization.fr.resx, yang kuncinya adalah string pesan kesalahan dan yang nilainya adalah pesan kesalahan yang dilokalkan. File harus ditemukan di folder App.LocalResources. Misalnya, berikut ini adalah kunci dan nilainya dalam pesan kesalahan bahasa Prancis (fr) yang dilokalkan:

Nama Nilai
Peringkat harus antara 1 hingga 10. La note doit être comprise entre 1 et 10.

Selain itu, pelokalan anotasi data dapat diperluas. Pengembang dapat menyambungkan penyedia pelokalan string mereka sendiri dengan menerapkan IStringLocalizerProvider antarmuka untuk menyimpan string pelokalan di suatu tempat selain dalam file sumber daya.

Dukungan asinkron dengan penyedia penyimpanan status sesi

ASP.NET sekarang memungkinkan metode pengembalian tugas digunakan dengan penyedia penyimpanan status sesi, sehingga memungkinkan aplikasi ASP.NET untuk mendapatkan manfaat skalabilitas asinkron. Untuk mendukung operasi asinkron dengan penyedia penyimpanan status sesi, ASP.NET menyertakan antarmuka baru, System.Web.SessionState.ISessionStateModule, yang mewarisi dari IHttpModule dan memungkinkan pengembang untuk menerapkan modul status sesi dan penyedia penyimpanan sesi asinkron mereka sendiri. Antarmuka didefinisikan sebagai berikut:

public interface ISessionStateModule : IHttpModule {
    void ReleaseSessionState(HttpContext context);
    Task ReleaseSessionStateAsync(HttpContext context);
}
Public Interface ISessionStateModule : Inherits IHttpModule
   Sub ReleaseSessionState(context As HttpContext)
   Function ReleaseSessionStateAsync(context As HttpContext) As Task
End Interface

Selain itu, SessionStateUtility kelas ini mencakup dua metode baru, IsSessionStateReadOnly dan IsSessionStateRequired, yang dapat digunakan untuk mendukung operasi asinkron.

Dukungan asinkron untuk penyedia output-cache

Dimulai dengan .NET Framework 4.6.2, metode pengembalian tugas dapat digunakan dengan penyedia output-cache untuk memberikan manfaat skalabilitas asinkron. Penyedia yang menerapkan metode ini mengurangi pemblokiran utas di server web dan meningkatkan skalabilitas layanan ASP.NET.

API berikut telah ditambahkan untuk mendukung penyedia output-cache asinkron:

Kategori karakter

Karakter dalam .NET Framework 4.6.2 diklasifikasikan berdasarkan Unicode Standard, Versi 8.0.0. Dalam .NET Framework 4.6 dan .NET Framework 4.6.1, karakter diklasifikasikan berdasarkan kategori karakter Unicode 6.3.

Dukungan untuk Unicode 8.0 terbatas pada klasifikasi karakter berdasarkan CharUnicodeInfo kelas dan untuk jenis dan metode yang mengandalkannya. Ini termasuk StringInfo kelas, metode kelebihan bebanChar.GetUnicodeCategory, dan kelas karakter yang dikenali oleh mesin ekspresi reguler .NET Framework. Perbandingan dan pengurutan karakter dan string tidak terpengaruh oleh perubahan ini dan terus mengandalkan sistem operasi yang mendasarinya atau, pada sistem Windows 7, pada data karakter yang disediakan oleh .NET Framework.

Untuk perubahan kategori karakter dari Unicode 6.0 ke Unicode 7.0, lihat The Unicode Standard, Version 7.0.0 di situs web Unicode Consortium. Untuk perubahan dari Unicode 7.0 ke Unicode 8.0, lihat The Unicode Standard, Versi 8.0.0 di situs web The Unicode Consortium.

Kriptografi

Dukungan untuk sertifikat X509 yang berisi FIPS 186-3 DSA

.NET Framework 4.6.2 menambahkan dukungan untuk sertifikat DSA (Algoritma Tanda Tangan Digital) X509 yang kuncinya melebihi batas FIPS 186-2 1024-bit.

Selain mendukung ukuran kunci yang lebih besar dari FIPS 186-3, .NET Framework 4.6.2 memungkinkan tanda tangan komputasi dengan keluarga algoritma hash SHA-2 (SHA256, SHA384, dan SHA512). Dukungan FIPS 186-3 disediakan oleh kelas baru System.Security.Cryptography.DSACng.

Sesuai dengan perubahan terbaru pada RSA kelas di .NET Framework 4.6 dan ECDsa kelas di .NET Framework 4.6.1, DSA kelas dasar abstrak di .NET Framework 4.6.2 memiliki metode tambahan untuk memungkinkan penelepon menggunakan fungsionalitas ini tanpa transmisi. Anda dapat memanggil DSACertificateExtensions.GetDSAPrivateKey metode ekstensi untuk menandatangani data, seperti yang ditunjukkan contoh berikut.

public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert)
{
    using (DSA dsa = cert.GetDSAPrivateKey())
    {
        return dsa.SignData(data, HashAlgorithmName.SHA384);
    }
}
Public Shared Function SignDataDsaSha384(data As Byte(), cert As X509Certificate2) As Byte()
    Using DSA As DSA = cert.GetDSAPrivateKey()
        Return DSA.SignData(data, HashAlgorithmName.SHA384)
    End Using
End Function

Dan Anda dapat memanggil DSACertificateExtensions.GetDSAPublicKey metode ekstensi untuk memverifikasi data yang ditandatangani, seperti yang ditunjukkan contoh berikut.

public static bool VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert)
{
    using (DSA dsa = cert.GetDSAPublicKey())
    {
        return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384);
    }
}
 Public Shared Function VerifyDataDsaSha384(data As Byte(), signature As Byte(), cert As X509Certificate2) As Boolean
    Using dsa As DSA = cert.GetDSAPublicKey()
        Return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384)
    End Using
End Function

Peningkatan kejelasan untuk input ke rutinitas derivasi kunci ECDiffieHellman

.NET Framework 3.5 menambahkan dukungan untuk Eliptic Curve Diffie-Hellman Perjanjian Kunci dengan tiga rutinitas Key Derivation Function (KDF) yang berbeda. Input ke rutinitas, dan rutinitas itu sendiri, dikonfigurasi melalui properti pada ECDiffieHellmanCng objek. Tetapi karena tidak setiap rutin membaca setiap properti input, ada cukup ruang untuk kebingungan pada masa lalu pengembang.

Untuk mengatasi hal ini di .NET Framework 4.6.2, tiga metode berikut telah ditambahkan ke ECDiffieHellman kelas dasar untuk lebih jelas mewakili rutinitas KDF ini dan inputnya:

Metode ECDiffieHellman Deskripsi
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) Memperoleh materi kunci menggunakan rumus

HASH(secretPrepend || x || secretAppend)

HASH(secretPrepend OrElse x OrElse secretAppend)

di mana x adalah hasil komputasi dari algoritma Diffie-Hellman EC.
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) Memperoleh materi kunci menggunakan rumus

HMAC(hmacKey, secretPrepend || x || secretAppend)

HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend)

di mana x adalah hasil komputasi dari algoritma Diffie-Hellman EC.
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) Memperoleh materi kunci menggunakan algoritma derivasi fungsi pseudo-acak TLS (PRF).

Dukungan untuk enkripsi simetris kunci yang bertahan

Perpustakaan kriptografi Windows (CNG) menambahkan dukungan untuk menyimpan kunci simetris yang bertahan dan menggunakan kunci simetris yang disimpan perangkat keras, dan .NET Framework 4.6.2 memungkinkan pengembang untuk menggunakan fitur ini. Karena gagasan nama kunci dan penyedia kunci adalah implementasi-spesifik, menggunakan fitur ini memerlukan memanfaatkan konstruktor dari jenis implementasi konkret bukan pendekatan pabrik yang disukai (seperti panggilan Aes.Create).

Dukungan enkripsi simetris kunci yang bertahan ada untuk algoritma AES (AesCng) dan 3DES (TripleDESCng). Contohnya:

public static byte[] EncryptDataWithPersistedKey(byte[] data, byte[] iv)
{
    using (Aes aes = new AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider))
    {
        aes.IV = iv;

        // Using the zero-argument overload is required to make use of the persisted key
        using (ICryptoTransform encryptor = aes.CreateEncryptor())
        {
            if (!encryptor.CanTransformMultipleBlocks)
            {
                throw new InvalidOperationException("This is a sample, this case wasn't handled...");
            }

            return encryptor.TransformFinalBlock(data, 0, data.Length);
        }
    }
}
Public Shared Function EncryptDataWithPersistedKey(data As Byte(), iv As Byte()) As Byte()
    Using Aes As Aes = New AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider)
        Aes.IV = iv

        ' Using the zero-argument overload Is required to make use of the persisted key
        Using encryptor As ICryptoTransform = Aes.CreateEncryptor()
            If Not encryptor.CanTransformMultipleBlocks Then
                Throw New InvalidOperationException("This is a sample, this case wasn't handled...")
            End If
            Return encryptor.TransformFinalBlock(data, 0, data.Length)
        End Using
    End Using
End Function

Dukungan SignedXml untuk hashing SHA-2

.NET Framework 4.6.2 menambahkan dukungan ke SignedXml kelas untuk metode tanda tangan RSA-SHA256, RSA-SHA384, dan RSA-SHA512 PKCS #1, dan algoritma digest referensi SHA256, SHA384, dan SHA512.

Semua konstanta URI diekspos pada SignedXml:

Bidang SignedXml Terus-menerus
XmlDsigSHA256Url "http://www.w3.org/2001/04/xmlenc#sha256"
XmlDsigRSASHA256Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
XmlDsigSHA384Url "http://www.w3.org/2001/04/xmldsig-more#sha384"
XmlDsigRSASHA384Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"
XmlDsigSHA512Url "http://www.w3.org/2001/04/xmlenc#sha512"
XmlDsigRSASHA512Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"

Setiap program yang telah mendaftarkan SignatureDescription penangan khusus ke dalam CryptoConfig untuk menambahkan dukungan untuk algoritma ini akan terus berfungsi seperti yang dilakukan di masa lalu, tetapi karena sekarang ada default platform, CryptoConfig pendaftaran tidak lagi diperlukan.

SqlClient

Penyedia Data .NET Framework untuk SQL Server (System.Data.SqlClient) menyertakan fitur baru berikut di .NET Framework 4.6.2:

Pengumpulan koneksi dan batas waktu dengan Azure SQL Database

Ketika pengumpulan koneksi diaktifkan dan waktu habis atau kesalahan masuk lainnya terjadi, pengecualian di-cache, dan pengecualian yang di-cache dilemparkan pada upaya koneksi berikutnya selama 5 detik hingga 1 menit berikutnya. Untuk informasi selengkapnya, lihat Kumpulan Koneksi SQL Server (ADO.NET).

Perilaku ini tidak diinginkan saat menyambungkan ke Azure SQL Database, karena upaya koneksi dapat gagal dengan kesalahan sementara yang biasanya dipulihkan dengan cepat. Untuk mengoptimalkan pengalaman coba lagi koneksi dengan lebih baik, perilaku periode pemblokiran kumpulan koneksi dihapus saat koneksi ke Azure SQL Database gagal.

Penambahan kata kunci baru PoolBlockingPeriod memungkinkan Anda memilih periode pemblokiran yang paling cocok untuk aplikasi Anda. Nilai meliputi:

Auto

Periode pemblokiran kumpulan koneksi untuk aplikasi yang terhubung ke Azure SQL Database dinonaktifkan, dan periode pemblokiran kumpulan koneksi untuk aplikasi yang terhubung ke instans SQL Server lainnya diaktifkan. Ini adalah nilai default. Jika nama titik akhir Server berakhir dengan salah satu hal berikut ini, mereka dianggap Azure SQL Database:

  • .database.windows.net

  • .database.chinacloudapi.cn

  • .database.usgovcloudapi.net

  • .database.cloudapi.de

AlwaysBlock

Periode pemblokiran kumpulan koneksi selalu diaktifkan.

NeverBlock

Periode pemblokiran kumpulan koneksi selalu dinonaktifkan.

Penyempurnaan untuk Always Encrypted

SQLClient memperkenalkan dua peningkatan untuk Always Encrypted:

  • Untuk meningkatkan performa kueri berparameter terhadap kolom database terenkripsi, metadata enkripsi untuk parameter kueri sekarang di-cache. Dengan properti SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled diatur ke true (yang merupakan nilai default), jika kueri yang sama dipanggil beberapa kali, klien mengambil metadata parameter dari server hanya sekali.

  • Entri kunci enkripsi kolom dalam cache kunci sekarang dikeluarkan setelah interval waktu yang dapat dikonfigurasi, diatur menggunakan SqlConnection.ColumnEncryptionKeyCacheTtl properti.

Windows Communication Foundation

Dalam .NET Framework 4.6.2, Windows Communication Foundation telah ditingkatkan di bidang-bidang berikut:

Dukungan keamanan transportasi WCF untuk sertifikat yang disimpan menggunakan CNG

Keamanan transportasi WCF mendukung sertifikat yang disimpan menggunakan pustaka kriptografi Windows (CNG). Dalam .NET Framework 4.6.2, dukungan ini terbatas menggunakan sertifikat dengan kunci publik yang memiliki eksponen tidak lebih dari 32 bit panjangnya. Ketika aplikasi menargetkan .NET Framework 4.6.2, fitur ini aktif secara default.

Untuk aplikasi yang menargetkan .NET Framework 4.6.1 dan yang lebih lama tetapi berjalan pada .NET Framework 4.6.2, fitur ini dapat diaktifkan dengan menambahkan baris berikut ke bagian <runtime> dari file app.config atau web.config.

<AppContextSwitchOverrides
    value="Switch.System.IdentityModel.DisableCngCertificates=false"
/>

Ini juga dapat dilakukan secara terprogram dengan kode berikut:

private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificates";
AppContext.SetSwitch(disableCngCertificates, false);
Const DisableCngCertificates As String = "Switch.System.IdentityModel.DisableCngCertificates"
AppContext.SetSwitch(disableCngCertificates, False)

Dukungan yang lebih baik untuk beberapa aturan penyesuaian waktu musim panas oleh kelas DataContractJsonSerializer

Pelanggan dapat menggunakan pengaturan konfigurasi aplikasi untuk menentukan apakah DataContractJsonSerializer kelas mendukung beberapa aturan penyesuaian untuk satu zona waktu. Ini adalah fitur pilih ikut. Untuk mengaktifkannya, tambahkan pengaturan berikut ke file app.config Anda:

<runtime>
     <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>

Ketika fitur ini diaktifkan, DataContractJsonSerializer objek menggunakan TimeZoneInfo jenis alih-alih TimeZone jenis untuk mendeserialisasi data tanggal dan waktu. TimeZoneInfo mendukung beberapa aturan penyesuaian, yang memungkinkan untuk bekerja dengan data zona waktu historis; TimeZone tidak.

Untuk informasi selengkapnya tentang TimeZoneInfo penyesuaian struktur dan zona waktu, lihat Gambaran Umum Zona Waktu.

Kecocokan terbaik NetNamedPipeBinding

WCF memiliki pengaturan aplikasi baru yang dapat diatur pada aplikasi klien untuk memastikan mereka selalu terhubung ke layanan yang mendengarkan pada URI yang paling sesuai dengan yang mereka minta. Dengan pengaturan aplikasi ini diatur ke false (default), klien dapat menggunakan NetNamedPipeBinding untuk mencoba menyambungkan ke layanan yang mendengarkan pada URI yang merupakan substring dari URI yang diminta.

Misalnya, klien mencoba terhubung ke layanan yang mendengarkan di net.pipe://localhost/Service1, tetapi layanan yang berbeda pada mesin yang berjalan dengan hak istimewa administrator mendengarkan di net.pipe://localhost. Dengan pengaturan aplikasi ini diatur ke false, klien akan mencoba untuk terhubung ke layanan yang salah. Setelah mengatur pengaturan aplikasi ke true, klien akan selalu terhubung ke layanan yang paling cocok.

Catatan

Klien yang menggunakan NetNamedPipeBinding layanan temukan berdasarkan alamat dasar layanan (jika ada) daripada alamat titik akhir lengkap. Untuk memastikan pengaturan ini selalu berfungsi, layanan harus menggunakan alamat dasar yang unik.

Untuk mengaktifkan perubahan ini, tambahkan pengaturan aplikasi berikut ke file App.config atau Web.config aplikasi klien Anda:

<configuration>
    <appSettings>
        <add key="wcf:useBestMatchNamedPipeUri" value="true" />
    </appSettings>
</configuration>

SSL 3.0 bukan protokol default

Saat menggunakan NetTcp dengan keamanan transportasi dan jenis mandat sertifikat, protokol SSL 3.0 bukan lagi protokol default yang digunakan untuk menegosiasikan sambungan yang aman. Dalam kebanyakan kasus, seharusnya tidak ada dampak pada aplikasi yang sudah ada, karena TLS 1.0 selalu disertakan dalam daftar protokol untuk NetTcp. Semua klien yang sudah ada harus dapat menegosiasikan sambungan dengan menggunakan setidaknya TLS1.1.0. Jika Ssl3 diperlukan, gunakan salah satu mekanisme konfigurasi berikut untuk menambahkannya ke daftar protokol yang dinegosiasikan.

Windows Presentation Foundation (WPF)

Dalam .NET Framework 4.6.2, Windows Presentation Foundation telah ditingkatkan di bidang-bidang berikut:

Pengurutan grup

Aplikasi yang menggunakan CollectionView objek untuk mengelompokkan data sekarang dapat secara eksplisit menyatakan cara mengurutkan grup. Pengurutan eksplisit mengatasi masalah pengurutan non-intuitif yang terjadi saat aplikasi menambahkan atau menghapus grup secara dinamis, atau saat mengubah nilai properti item yang terlibat dalam pengelompokan. Ini juga dapat meningkatkan performa proses pembuatan grup dengan memindahkan perbandingan properti pengelompokan dari jenis koleksi lengkap ke jenis grup.

Untuk mendukung pengurutan grup, properti GroupDescription.SortDescriptions dan GroupDescription.CustomSort baru menjelaskan cara mengurutkan kumpulan grup yang dihasilkan oleh GroupDescription objek. Ini dianalogikan dengan cara properti bernama ListCollectionView identik menjelaskan cara mengurutkan item data.

Dua properti statik baru dari PropertyGroupDescription kelas, CompareNameAscending dan CompareNameDescending, dapat digunakan untuk kasus yang paling umum.

Misalnya, XAML berikut mengelompokkan data berdasarkan usia, mengurutkan grup usia dalam urutan naik, dan mengelompokkan item dalam setiap grup usia menurut nama belakang.

<GroupDescriptions>
     <PropertyGroupDescription
         PropertyName="Age"
         CustomSort=
              "{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
     </PropertyGroupDescription>
</GroupDescriptions>

<SortDescriptions>
     <SortDescription PropertyName="LastName"/>
</SortDescriptions>

Dukungan keyboard sentuh

Dukungan keyboard sentuh memungkinkan pelacakan fokus dalam aplikasi WPF dengan secara otomatis memanggil dan mematikan Keyboard sentuh di Windows 10 ketika input sentuhan diterima oleh kontrol yang dapat mengambil input tekstual.

Dalam versi .NET Framework sebelumnya, aplikasi WPF tidak dapat memilih pelacakan fokus tanpa menonaktifkan dukungan gerakan pena/sentuh WPF. Akibatnya, aplikasi WPF harus memilih antara dukungan sentuh WPF penuh atau mengandalkan promosi mouse Windows.

DPI per monitor

Untuk mendukung proliferasi lingkungan DPI tinggi dan DPI hibrid baru-baru ini untuk aplikasi WPF, WPF di .NET Framework 4.6.2 memungkinkan kesadaran per monitor. Lihat sampel dan panduan pengembang di GitHub untuk informasi lebih lanjut tentang cara mengaktifkan aplikasi WPF Anda menjadi sadar DPI per-monitor.

Dalam versi .NET Framework sebelumnya, aplikasi WPF sadar sistem-DPI. Dengan kata lain, UI aplikasi diskalakan oleh OS yang sesuai, tergantung pada DPI monitor tempat aplikasi dirender.

Untuk aplikasi yang berjalan di bawah .NET Framework 4.6.2, Anda dapat menonaktifkan perubahan DPI per monitor di aplikasi WPF dengan menambahkan pernyataan konfigurasi ke bagian <runtime> file konfigurasi aplikasi Anda, sebagai berikut:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>

Windows Workflow Foundation (WF)

Di .NET Framework 4.6.2, Windows Workflow Foundation telah ditingkatkan di bidang berikut:

Dukungan untuk ekspresi C# dan IntelliSense di Rehosted WF Designer

Dimulai dengan .NET Framework 4.5, WF mendukung ekspresi C# di Visual Studio Designer dan dalam alur kerja kode. Perancang Alur Kerja yang Dihost Ulang adalah fitur utama WF yang memungkinkan Perancang Alur Kerja berada dalam aplikasi di luar Visual Studio (misalnya, di WPF). Windows Workflow Foundation menyediakan kemampuan untuk mendukung ekspresi C# dan IntelliSense di Desainer Alur Kerja yang Dihosting Ulang. Untuk informasi selengkapnya, lihat blog Windows Workflow Foundation.

Availability of IntelliSense when a customer rebuilds a workflow project from Visual StudioDalam versi .NET Framework sebelum 4.6.2, WF Designer IntelliSense rusak saat pelanggan membangun kembali proyek alur kerja dari Visual Studio. Meskipun build proyek berhasil, jenis alur kerja tidak ditemukan pada desainer, dan peringatan dari IntelliSense untuk jenis alur kerja yang hilang muncul di jendela Daftar Kesalahan. .NET Framework 4.6.2 mengatasi masalah ini dan membuat IntelliSense tersedia.

Aplikasi Alur Kerja V1 dengan Pelacakan Alur Kerja sekarang berjalan di bawah mode FIPS

Komputer dengan Mode Kepatuhan FIPS yang diaktifkan sekarang dapat berhasil menjalankan aplikasi bergaya Versi 1 alur kerja dengan pelacakan Alur Kerja. Untuk mengaktifkan skenario ini, Anda harus membuat perubahan berikut ke file app.config Anda:

<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />

Jika skenario ini tidak diaktifkan, menjalankan aplikasi terus menghasilkan pengecualian dengan pesan, "Implementasi ini bukan bagian dari algoritma kriptografi yang divalidasi FIPS Platform Windows."

Peningkatan Alur Kerja saat menggunakan Pembaruan Dinamis dengan Perancang Alur Kerja Visual Studio

Perancang Alur Kerja, Perancang Aktivitas Bagan Alur, dan Perancang Aktivitas Alur Kerja lainnya sekarang berhasil memuat dan menampilkan alur kerja yang telah disimpan setelah memanggil DynamicUpdateServices.PrepareForUpdate metode. Dalam versi .NET Framework sebelum .NET Framework 4.6.2, memuat file XAML di Visual Studio untuk alur kerja yang telah disimpan setelah panggilan DynamicUpdateServices.PrepareForUpdate dapat mengakibatkan masalah berikut:

  • Perancang Alur Kerja tidak dapat memuat file XAML dengan benar (ketika ViewStateData.Id berada di akhir baris).

  • Perancang Aktivitas Diagram Alur atau Perancang Aktivitas Alur Kerja lainnya dapat menampilkan semua objek di lokasi defaultnya dibandingkan dengan nilai properti terlampir.

ClickOnce

ClickOnce telah diperbarui untuk mendukung TLS 1.1 dan TLS 1.2 selain protokol 1.0, yang sudah didukungnya. ClickOnce secara otomatis mendeteksi protokol mana yang diperlukan; tidak ada langkah tambahan dalam aplikasi ClickOnce yang diperlukan untuk mengaktifkan dukungan TLS 1.1 dan 1.2.

Mengonversi aplikasi Formulir Windows dan WPF ke aplikasi UWP

Windows sekarang menawarkan kemampuan untuk menghadirkan aplikasi desktop Windows yang ada, termasuk WPF dan aplikasi Formulir Windows, ke Universal Windows Platform (UWP). Teknologi ini bertindak sebagai jembatan dengan memungkinkan Anda memigrasikan basis kode yang ada secara bertahap ke UWP, sehingga membawa aplikasi Anda ke semua perangkat Windows 10.

Aplikasi desktop yang dikonversi mendapatkan identitas aplikasi yang mirip dengan identitas aplikasi UWP, yang membuat API UWP dapat diakses untuk mengaktifkan fitur seperti Live Tiles dan pemberitahuan. Aplikasi terus berperilaku seperti sebelumnya dan berjalan sebagai aplikasi kepercayaan penuh. Setelah aplikasi dikonversi, proses kontainer aplikasi dapat ditambahkan ke proses kepercayaan penuh yang ada untuk menambahkan antarmuka pengguna adaptif. Ketika semua fungsionalitas dipindahkan ke proses kontainer aplikasi, proses kepercayaan penuh dapat dihapus dan aplikasi UWP baru dapat tersedia untuk semua perangkat Windows 10.

Penyempurnaan penelusuran kesalahan

Penelusuran kesalahan API yang tidak dikelola telah ditingkatkan di .NET Framework 4.6.2 untuk melakukan analisis tambahan ketika NullReferenceException dilemparkan sehingga dimungkinkan untuk menentukan variabel mana dalam satu baris kode sumber yang merupakan null. Untuk mendukung skenario ini, API berikut telah ditambahkan ke penelusuran kesalahan API yang tidak dikelola.

Apa yang baru dalam .NET Framework 4.6.1

.NET Framework 4.6.1 mencakup fitur-fitur baru di bidang-bidang berikut:

Untuk informasi selengkapnya tentang .NET Framework 4.6.1, lihat topik berikut ini:

Kriptografi: Dukungan untuk sertifikat X509 yang berisi ECDSA

.NET Framework 4.6 menambahkan dukungan RSACng untuk sertifikat X509. .NET Framework 4.6.1 menambahkan dukungan untuk sertifikat X509 ECDSA (Elliptic Curve Digital Signature Algorithm).

ECDSA menawarkan performa yang lebih baik dan merupakan algoritma kriptografi yang lebih aman daripada RSA, memberikan pilihan yang sangat baik di mana performa dan skalabilitas Transport Layer Security (TLS) menjadi perhatian. Implementasi .NET Framework membungkus panggilan ke fungsionalitas Windows yang ada.

Contoh kode berikut menunjukkan betapa mudahnya menghasilkan tanda tangan untuk aliran byte dengan menggunakan dukungan baru untuk sertifikat ECDSA X509 yang disertakan dalam .NET Framework 4.6.1.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public class Net461Code
{
    public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
    {
        using (ECDsa privateKey = cert.GetECDsaPrivateKey())
        {
            return privateKey.SignData(data, HashAlgorithmName.SHA512);
        }
    }

    public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
    {
        return privateKey.SignData(data, HashAlgorithmName.SHA512);
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates

Public Class Net461Code
    Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
        Using privateKey As ECDsa = cert.GetECDsaPrivateKey()
            Return privateKey.SignData(data, HashAlgorithmName.SHA512)
        End Using
    End Function

    Public Shared Function SignECDsaSha512(data As Byte, privateKey As ECDsa) As Byte()
        Return privateKey.SignData(data, HashAlgorithmName.SHA512)
    End Function
End Class

Ini menawarkan kontras yang ditandai dengan kode yang diperlukan untuk menghasilkan tanda tangan di .NET Framework 4.6.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public class Net46Code
{
    public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
    {
        // This would require using cert.Handle and a series of p/invokes to get at the
        // underlying key, then passing that to a CngKey object, and passing that to
        // new ECDsa(CngKey).  It's a lot of work.
        throw new Exception("That's a lot of work...");
    }

    public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
    {
        // This way works, but SignData probably better matches what you want.
        using (SHA512 hasher = SHA512.Create())
        {
            byte[] signature1 = privateKey.SignHash(hasher.ComputeHash(data));
        }

        // This might not be the ECDsa you got!
        ECDsaCng ecDsaCng = (ECDsaCng)privateKey;
        ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512;
        return ecDsaCng.SignData(data);
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates

Public Class Net46Code
    Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
        ' This would require using cert.Handle and a series of p/invokes to get at the
        ' underlying key, then passing that to a CngKey object, and passing that to
        ' new ECDsa(CngKey).  It's a lot of work.
        Throw New Exception("That's a lot of work...")
    End Function

    Public Shared Function SignECDsaSha512(data As Byte(), privateKey As ECDsa) As Byte()
        ' This way works, but SignData probably better matches what you want.
        Using hasher As SHA512 = SHA512.Create()
            Dim signature1 As Byte() = privateKey.SignHash(hasher.ComputeHash(data))
        End Using

        ' This might not be the ECDsa you got!
        Dim ecDsaCng As ECDsaCng = CType(privateKey, ECDsaCng)
        ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512
        Return ecDsaCng.SignData(data)
    End Function
End Class

ADO.NET

Berikut ini telah ditambahkan ke ADO.NET:

Dukungan Always Encrypted untuk kunci yang dilindungi perangkat keras

ADO.NET sekarang mendukung penyimpanan kunci master kolom Always Encrypted secara asli dalam Modul Keamanan Perangkat Keras (HSM). Dengan dukungan ini, pelanggan dapat memanfaatkan kunci asimetris yang disimpan di HSM tanpa harus menulis kolom penyedia penyimpanan kunci master kustom dan mendaftarkannya dalam aplikasi.

Pelanggan perlu memasang penyedia CSP yang disediakan vendor HSM atau penyedia toko kunci CNG di server aplikasi atau komputer klien untuk mengakses data Always Encrypted yang dilindungi dengan kunci master kolom yang disimpan dalam HSM.

Perilaku koneksi yang ditingkatkan MultiSubnetFailover untuk AlwaysOn

SqlClient sekarang secara otomatis menyediakan koneksi yang lebih cepat ke Grup Ketersediaan AlwaysOn (AG). Ini secara transparan mendeteksi apakah aplikasi Anda terhubung ke grup ketersediaan AlwaysOn (AG) pada subnet yang berbeda dan dengan cepat menemukan server aktif saat ini dan menyediakan koneksi ke server. Sebelum rilis ini, aplikasi harus mengatur string koneksi untuk disertakan "MultisubnetFailover=true" untuk menunjukkan bahwa aplikasi tersambung ke Grup Ketersediaan AlwaysOn. Tanpa mengatur kata kunci koneksi ke true, aplikasi mungkin mengalami batas waktu saat menyambungkan ke Grup Ketersediaan AlwaysOn. Dengan rilis ini, aplikasi tidak perlu mengatur MultiSubnetFailover ke true lagi. Untuk informasi selengkapnya tentang dukungan SqlClient untuk Grup Ketersediaan AlwaysOn, lihat Dukungan SqlClient untuk Ketersediaan Tinggi, Pemulihan Bencana.

Windows Presentation Foundation (WPF)

Windows Presentation Foundation mencakup sejumlah penyempurnaan dan perubahan.

Performa yang Ditingkatkan

Penundaan dalam peristiwa sentuhan pengaktifan telah diperbaiki di .NET Framework 4.6.1. Selain itu, mengetik dalam RichTextBox kontrol tidak lagi mengikat utas render selama input cepat.

Penyempurnaan pemeriksaan ejaan

Pemeriksa ejaan di WPF telah diperbarui pada Windows 8.1 dan versi yang lebih baru untuk memanfaatkan dukungan sistem operasi untuk pemeriksaan ejaan bahasa tambahan. Tidak ada perubahan fungsionalitas pada versi Windows sebelum Windows 8.1.

Seperti pada versi .NET Framework sebelumnya, bahasa untuk TextBox kontrol atau RichTextBox blok terdeteksi dengan mencari informasi dalam urutan berikut:

  • xml:lang, jika ada.

  • Bahasa input saat ini.

  • Budaya saat ini.

Untuk informasi selengkapnya tentang dukungan bahasa di WPF, lihat posting blog WPF di fitur .NET Framework 4.6.1.

Dukungan tambahan untuk kamus kustom per pengguna

Dalam .NET Framework 4.6.1, WPF mengenali kamus kustom yang terdaftar secara global. Kemampuan ini tersedia selain kemampuan untuk mendaftarkannya per kontrol.

Dalam versi WPF sebelumnya, kamus kustom tidak mengenali daftar Kata yang Dikecualikan dan Koreksi Otomatis. Mereka didukung pada Windows 8.1 dan Windows 10 melalui penggunaan file yang dapat ditempatkan di bawah %AppData%\Microsoft\Spelling\<language tag> direktori. Aturan berikut berlaku untuk file-file ini:

  • File harus memiliki ekstensi .dic (untuk kata yang ditambahkan), .exc (untuk kata yang dikecualikan), atau .acl (untuk Koreksi Otomatis).

  • File harus UTF-16 LE plaintext yang dimulai dengan Byte Order Mark (BOM).

  • Setiap baris harus terdiri dari kata (dalam daftar kata yang ditambahkan dan dikecualikan), atau pasangan koreksi otomatis dengan kata-kata yang dipisahkan oleh bilah vertikal ("|") (dalam daftar kata Koreksi Otomatis).

  • File-file ini dianggap baca-saja dan tidak dimodifikasi oleh sistem.

Catatan

Format file baru ini tidak didukung secara langsung oleh API pemeriksaan ejaan WPF, dan kamus kustom yang disediakan ke WPF dalam aplikasi harus terus menggunakan file .lex.

Sampel

Ada sejumlah sampel WPF pada repositori GitHub Microsoft/WPF-Samples. Bantu kami meningkatkan sampel kami dengan mengirimkan permintaan tarik atau membuka masalah GitHub.

Ekstensi DirectX

WPF mencakup paket NuGet yang menyediakan implementasi D3DImage baru yang memudahkan Anda untuk beroperasi dengan konten DX10 dan Dx11. Kode untuk paket ini telah bersumber terbuka dan tersedia di GitHub.

Windows Workflow Foundation: Transaksi

Metode ini Transaction.EnlistPromotableSinglePhase sekarang dapat menggunakan manajer transaksi terdistribusi selain MSDTC untuk mempromosikan transaksi. Anda melakukan ini dengan menentukan pengidentifikasi promotor transaksi GUID ke kelebihan beban baru Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) . Jika operasi ini berhasil, ada batasan yang ditempatkan pada kemampuan transaksi. Setelah promotor transaksi non-MSDTC terdaftar, metode berikut melemparkan TransactionPromotionException karena metode ini memerlukan promosi ke MSDTC:

Setelah promotor transaksi non-MSDTC terdaftar, itu harus digunakan untuk pendaftaran tahan lama di masa depan dengan menggunakan protokol yang ditentukannya. Promotor Guid transaksi dapat diperoleh dengan menggunakan PromoterType properti. Ketika transaksi dipromosikan, promotor transaksi menyediakan Byte array yang mewakili token yang dipromosikan. Aplikasi dapat memperoleh token yang dipromosikan untuk transaksi yang dipromosikan non-MSDTC dengan metode GetPromotedToken.

Pengguna kelebihan beban baru Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) harus mengikuti urutan panggilan tertentu agar operasi promosi berhasil diselesaikan. Aturan ini didokumetasikan dalam dokumentasi metode.

Pembuatan Profil

API pembuatan profil yang tidak dikelola telah ditingkatkan sebagai berikut:

  • Dukungan yang lebih baik untuk mengakses PDB di antarmuka ICorProfilerInfo7.

    Dalam ASP.NET Core, menjadi jauh lebih umum bagi rakitan untuk dikompilasi dalam memori oleh Roslyn. Bagi pengembang yang membuat alat pembuatan profil, ini berarti bahwa PDB yang secara historis diserialisasikan pada disk mungkin tidak lagi ada. Alat profiler sering menggunakan PDB untuk memetakan kode kembali ke baris sumber untuk tugas seperti cakupan kode atau analisis performa baris demi baris. Antarmuka ICorProfilerInfo7 sekarang mencakup dua metode baru, ICorProfilerInfo7::GetInMemorySymbolsLength dan ICorProfilerInfo7::ReadInMemorySymbols, untuk menyediakan alat profiler ini dengan akses ke data PDB dalam memori, Dengan menggunakan API baru, profiler dapat memperoleh konten PDB dalam memori sebagai array byte dan kemudian memprosesnya atau membuat serialisasi ke disk.

  • Instrumentasi yang lebih baik dengan antarmuka ICorProfiler.

    Profiler yang menggunakan ICorProfiler fungsionalitas API ReJit untuk instrumentasi dinamis sekarang dapat memodifikasi beberapa metadata. Sebelumnya alat tersebut dapat menginstrumentasi IL kapan saja, tetapi metadata hanya dapat dimodifikasi pada waktu muat modul. Karena IL mengacu pada metadata, ini membatasi jenis instrumentasi yang dapat dilakukan. Kami telah mengangkat beberapa batas tersebut dengan menambahkan metode ICorProfilerInfo7::ApplyMetaData untuk mendukung subset pengeditan metadata setelah modul dimuat, khususnya dengan menambahkan rekaman AssemblyRef, TypeRef, TypeSpec, MemberRef, MemberSpec danUserString baru. Perubahan ini memungkinkan jangkauan instrumentasi on-the-fly yang jauh lebih luas.

PDB Generator Gambar Asli (NGEN)

Pelacakan peristiwa lintas komputer memungkinkan pelanggan untuk membuat profil program di Mesin A dan melihat data pembuatan profil dengan pemetaan baris sumber di Mesin B. Menggunakan versi .NET Framework sebelumnya, pengguna akan menyalin semua modul dan gambar asli dari mesin yang diprofilkan ke mesin analisis yang berisi IL PDB untuk membuat pemetaan sumber-ke-asli. Meskipun proses ini mungkin berfungsi dengan baik ketika file relatif kecil, seperti untuk aplikasi telepon, file bisa sangat besar pada sistem desktop dan membutuhkan waktu yang signifikan untuk menyalin.

Dengan PDB Ngen, NGen dapat membuat PDB yang berisi pemetaan IL-ke-asli tanpa dependensi pada IL PDB. Dalam skenario pelacakan peristiwa lintas mesin kami, yang diperlukan adalah menyalin PDB gambar asli yang dihasilkan oleh Mesin A ke Mesin B dan untuk menggunakan API Akses Antarmuka Debug untuk membaca pemetaan sumber-ke-IL PDB IL dan pemetaan IL-ke-asli gambar asli PDB. Menggabungkan kedua pemetaan menyediakan pemetaan sumber ke asli. Karena PDB gambar asli jauh lebih kecil dari semua modul dan gambar asli, proses penyalinan dari Mesin A ke Mesin B jauh lebih cepat.

Apa yang baru di .NET 2015

.NET 2015 memperkenalkan .NET Framework 4.6 dan .NET Core. Beberapa fitur baru berlaku untuk keduanya, dan fitur lain khusus untuk .NET Framework 4.6 atau .NET Core.

  • Inti ASP.NET

    .NET 2015 mencakup ASP.NET Core, yang merupakan implementasi .NET ramping untuk membangun aplikasi berbasis cloud modern. ASP.NET Core bersifat modular sehingga Anda hanya dapat menyertakan fitur-fitur yang diperlukan dalam aplikasi Anda. Ini dapat dihosting di IIS atau dihost sendiri dalam proses kustom, dan Anda dapat menjalankan aplikasi dengan versi .NET Framework yang berbeda di server yang sama. Ini termasuk sistem konfigurasi lingkungan baru yang dirancang untuk penyebaran cloud.

    MVC, WEB API, dan Halaman Web disatukan ke dalam satu kerangka kerja yang disebut MVC 6. Anda membangun aplikasi ASP.NET Core melalui alat di Visual Studio 2015 atau yang lebih baru. Aplikasi Anda yang ada akan bekerja pada .NET Framework baru; namun untuk membangun aplikasi yang menggunakan MVC 6 atau SignalR 3, Anda harus menggunakan sistem proyek di Visual Studio 2015 atau yang lebih baru.

    Untuk informasi, lihat ASP.NET Core.

  • Pembaruan ASP.NET

    • API berbasis tugas untuk Pembersihan Respons Asinkron

      ASP.NET sekarang menyediakan API berbasis tugas sederhana untuk pembersihan respons asinkron, HttpResponse.FlushAsync, yang memungkinkan respons dibersihkan secara asinkron dengan menggunakan dukungan bahasa async/await Anda.

    • Pengikatan model mendukung metode pengembalian tugas

      Di .NET Framework 4.5, ASP.NET menambahkan fitur Pengikatan Model yang memungkinkan pendekatan yang dapat diperluas dan berfokus pada kode untuk operasi data berbasis CRUD di halaman Formulir Web dan kontrol pengguna. Sistem Pengikatan Model sekarang mendukung metode pengikatan model pengembalian Task. Fitur ini memungkinkan pengembang Formulir Web untuk mendapatkan manfaat skalabilitas asinkron dengan kemudahan sistem pengikatan data saat menggunakan versi ORM yang lebih baru, termasuk Kerangka Kerja Entitas.

      Pengikatan model asinkron dikendalikan oleh aspnet:EnableAsyncModelBinding pengaturan konfigurasi.

      <appSettings>
          <add key=" aspnet:EnableAsyncModelBinding" value="true|false" />
      </appSettings>
      

      Pada aplikasi target .NET Framework 4.6, defaultnya adalah true. Pada aplikasi yang berjalan di .NET Framework 4.6 yang menargetkan versi .NET Framework yang lebih lama, aplikasi tersebut false secara default. Ini dapat diaktifkan dengan mengatur pengaturan konfigurasi ke true.

    • Dukunagn HTTP/2 (Windows 10)

      HTTP/2 adalah versi baru dari protokol HTTP yang menyediakan pemanfaatan koneksi yang jauh lebih baik (lebih sedikit perjalanan pulang-pergi antara klien dan server), menghasilkan pemuatan halaman web latensi yang lebih rendah untuk pengguna. Halaman web (dibandingkan dengan layanan) mendapat manfaat paling banyak dari HTTP/2, karena protokol mengoptimalkan beberapa artefak yang diminta sebagai bagian dari satu pengalaman. Dukungan HTTP/2 telah ditambahkan ke ASP.NET di .NET Framework 4.6. Karena fungsionalitas jaringan ada di beberapa lapisan, fitur baru diperlukan di Windows, di IIS, dan di ASP.NET untuk mengaktifkan HTTP/2. Anda harus menjalankan Windows 10 untuk menggunakan HTTP / 2 dengan ASP.NET.

      HTTP/2 juga didukung dan aktif secara default untuk aplikasi Universal Windows Platform (UWP) Windows 10 yang menggunakan System.Net.Http.HttpClient API.

      Untuk menyediakan cara untuk menggunakan fitur PUSH_PROMISE dalam aplikasi ASP.NET, metode baru dengan dua kelebihan beban, PushPromise(String) dan PushPromise(String, String, NameValueCollection), telah ditambahkan ke kelas HttpResponse.

      Catatan

      Meskipun ASP.NET Core mendukung HTTP/2, dukungan untuk fitur PUSH PROMISE belum ditambahkan.

      Browser dan server web (IIS di Windows) melakukan semua pekerjaan. Anda tidak perlu melakukan tugas berat untuk pengguna Anda.

      Sebagian besar browser utama mendukung HTTP/2, jadi kemungkinan pengguna Anda akan mendapat manfaat dari dukungan HTTP/2 jika server Anda mendukungnya.

    • Dukungan untuk Protokol Pengikatan Token

      Microsoft dan Google telah berkolaborasi pada pendekatan baru untuk autentikasi, yang disebut Protokol Pengikatan Token. Premisnya adalah bahwa token autentikasi (di cache browser Anda) dapat dicuri dan digunakan oleh penjahat untuk mengakses sumber daya yang aman (misalnya, rekening bank Anda) tanpa memerlukan kata sandi Anda atau pengetahuan istimewa lainnya. Protokol baru bertujuan untuk mengurangi masalah ini.

      Protokol Pengikatan Token akan diterapkan di Windows 10 sebagai fitur browser. ASP.NET aplikasi akan berpartisipasi dalam protokol, sehingga token autentikasi divalidasi agar sah. Implementasi klien dan server menetapkan perlindungan end-to-end yang ditentukan oleh protokol.

    • Algoritma hash string acak

      .NET Framework 4.5 memperkenalkan algoritma hash string acak. Namun, itu tidak didukung oleh ASP.NET karena beberapa fitur ASP.NET tergantung pada kode hash yang stabil. Di .NET Framework 4.6, algoritma hash string acak sekarang didukung. Untuk mengaktifkan fitur ini, gunakan aspnet:UseRandomizedStringHashAlgorithm pengaturan konfigurasi.

      <appSettings>
          <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" />
      </appSettings>
      
  • ADO.NET

    ADO .NET sekarang mendukung fitur Always Encrypted yang tersedia di SQL Server 2016. Dengan Always Encrypted, SQL Server dapat melakukan operasi pada data terenkripsi, dan yang terbaik dari semua kunci enkripsi berada dengan aplikasi di dalam lingkungan tepercaya pelanggan dan bukan di server. Always Encrypted mengamankan data pelanggan sehingga DBA tidak memiliki akses ke data teks biasa. Enkripsi dan dekripsi data terjadi secara transparan di tingkat driver, meminimalkan perubahan yang harus dilakukan pada aplikasi yang ada. Untuk detailnya, lihat Always Encrypted (Mesin Database) dan Always Encrypted (pengembangan klien).

  • Kompilator JIT 64-bit untuk kode terkelola

    .NET Framework 4.6 menampilkan versi baru kompilator JIT 64-bit (awalnya bernama kode RyuJIT). Kompilator 64-bit baru memberikan peningkatan performa yang signifikan atas kompilator JIT 64-bit yang lebih lama. Kompilator 64-bit baru diaktifkan untuk proses 64-bit yang berjalan di atas .NET Framework 4.6. Aplikasi Anda akan berjalan dalam proses 64-bit jika dikompilasi sebagai 64-bit atau AnyCPU dan berjalan pada sistem operasi 64-bit. Meskipun perawatan telah dilakukan untuk membuat transisi ke kompilator baru setransparan mungkin, perubahan perilaku dimungkinkan.

    Kompilator JIT 64-bit baru juga menyertakan fitur akselerasi SIMD perangkat keras ketika digabungkan dengan jenis berkemampuan SIMD di System.Numerics namespace layanan, yang dapat menghasilkan peningkatan performa yang baik.

  • Penyempurnaan pemuat rakitan

    Pemuat rakitan sekarang menggunakan memori lebih efisien dengan membongkar rakitan IL setelah gambar NGEN yang sesuai dimuat. Perubahan ini mengurangi memori virtual, yang sangat bermanfaat untuk aplikasi 32-bit besar (seperti Visual Studio), dan juga menghemat memori fisik.

  • Perubahan pustaka kelas dasar

    Banyak API baru telah ditambahkan ke .NET Framework 4.6 untuk mengaktifkan skenario utama. Ini termasuk perubahan dan penambahan berikut:

    • Implementasi IReadOnlyCollection<T>

      Koleksi tambahan mengimplementasikan IReadOnlyCollection<T> seperti Queue<T> dan Stack<T>.

    • CultureInfo.CurrentCulture dan CultureInfo.CurrentUICulture

      Properti CultureInfo.CurrentCulture dan CultureInfo.CurrentUICulture sekarang baca-tulis daripada baca-saja. Jika Anda menetapkan objek baru CultureInfo ke properti ini, budaya utas saat ini yang ditentukan oleh Thread.CurrentThread.CurrentCulture properti dan budaya utas UI saat ini yang ditentukan oleh Thread.CurrentThread.CurrentUICulture properti juga berubah.

    • Peningkatan pengumpulan sampah (GC)

      Kelas GC sekarang mencakup metode TryStartNoGCRegion dan EndNoGCRegion yang memungkinkan Anda melarang pengumpulan sampah selama eksekusi jalur kritis.

      Kelebihan metode GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) baru memungkinkan Anda mengontrol apakah tumpukan objek kecil dan tumpukan objek besar disapu dan dipadatkan atau disapu saja.

    • Jenis yang diaktifkan SIMD

      Namespace System.Numerics sekarang menyertakan sejumlah jenis yang diaktifkan SIMD, seperti Matrix3x2, Matrix4x4, Plane, Quaternion, Vector2, Vector3, dan Vector4.

      Karena kompilator JIT 64-bit baru juga menyertakan fitur akselerasi SIMD perangkat keras, ada peningkatan performa yang sangat signifikan saat menggunakan jenis yang diaktifkan SIMD dengan kompilator JIT 64-bit baru.

    • Pembaruan kriptografi

      API System.Security.Cryptography sedang diperbarui untuk mendukung API kriptografi CNG Windows. Versi .NET Framework sebelumnya bergantung sepenuhnya pada versi sebelumnya dari API kriptografi Windows sebagai dasar untuk System.Security.Cryptography implementasi. Kami telah memiliki permintaan untuk mendukung CNG API, karena mendukung algoritma kriptografi modern, yang penting untuk kategori aplikasi tertentu.

      .NET Framework 4.6 mencakup penyempurnaan baru berikut untuk mendukung API kriptografi CNG Windows:

      • Serangkaian metode ekstensi untuk Sertifikat X509, System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2) dan System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2), yang mengembalikan implementasi berbasis CNG daripada implementasi berbasis CAPI jika memungkinkan. (Beberapa smartcard, dll., masih memerlukan CAPI, dan API menangani fallback).

      • Kelas System.Security.Cryptography.RSACng, yang menyediakan implementasi CNG dari algoritma RSA.

      • Penyempurnaan pada API RSA sehingga tindakan umum tidak lagi memerlukan transmisi. Misalnya, mengenkripsi data menggunakan X509Certificate2 objek memerlukan kode seperti berikut ini di versi .NET Framework sebelumnya.

        RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
        byte[] oaepEncrypted = rsa.Encrypt(data, true);
        byte[] pkcs1Encrypted = rsa.Encrypt(data, false);
        
        Dim rsa As RSACryptoServiceProvider = CType(cert.PrivateKey, RSACryptoServiceProvider)
        Dim oaepEncrypted() As Byte = rsa.Encrypt(data, True)
        Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, False)
        

        Kode yang menggunakan API kriptografi baru di .NET Framework 4.6 dapat ditulis ulang sebagai berikut untuk menghindari transmisi.

        RSA rsa = cert.GetRSAPrivateKey();
        if (rsa == null)
           throw new InvalidOperationException("An RSA certificate was expected");
        
        byte[] oaepEncrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1);
        byte[] pkcs1Encrypted = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1);
        
        Dim rsa As RSA = cert.GetRSAPrivateKey()
        If rsa Is Nothing Then
            Throw New InvalidOperationException("An RSA certificate was expected")
        End If
        
        Dim oaepEncrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1)
        Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1)
        
    • Dukungan untuk mengonversi tanggal dan waktu ke atau dari waktu Unix

      Metode baru berikut telah ditambahkan ke DateTimeOffset struktur untuk mendukung konversi nilai tanggal dan waktu ke atau dari waktu Unix:

    • Sakelar kompatibilitas

      Kelas AppContext menambahkan fitur kompatibilitas baru yang memungkinkan penulis pustaka untuk menyediakan mekanisme penolakan yang seragam untuk fungsionalitas baru bagi pengguna mereka. Ini menetapkan kontrak yang digabungkan secara longgar antara komponen untuk mengkomunikasikan permintaan penolakan. Kemampuan ini biasanya penting ketika perubahan dilakukan pada fungsionalitas yang ada. Sebaliknya, sudah ada keikutsertaan implisit untuk fungsionalitas baru.

      Dengan AppContext, pustaka menentukan dan mengekspos sakelar kompatibilitas, sementara kode yang bergantung padanya dapat mengatur sakelar tersebut untuk memengaruhi perilaku pustaka. Secara default, pustaka menyediakan fungsionalitas baru, dan mereka hanya mengubahnya (yaitu, mereka menyediakan fungsionalitas sebelumnya) jika sakelar diatur.

      Aplikasi (atau pustaka) dapat mendeklarasikan nilai sakelar (yang selalu merupakan Boolean nilai) yang ditentukan pustaka dependen. Sakelar selalu secara implisit false. Mengatur sakelar true untuk mengaktifkannya. Secara eksplisit mengatur sakelar false untuk memberikan perilaku baru.

      AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true);
      
      AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", True)
      

      Pustaka harus memeriksa apakah konsumen telah mendeklarasikan nilai sakelar dan kemudian bertindak dengan tepat.

      if (!AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", out shouldThrow))
      {
          // This is the case where the switch value was not set by the application.
          // The library can choose to get the value of shouldThrow by other means.
          // If no overrides nor default values are specified, the value should be 'false'.
          // A false value implies the latest behavior.
      }
      
      // The library can use the value of shouldThrow to throw exceptions or not.
      if (shouldThrow)
      {
          // old code
      }
      else
      {
          // new code
      }
      
      If Not AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", shouldThrow) Then
          ' This is the case where the switch value was not set by the application.
          ' The library can choose to get the value of shouldThrow by other means.
          ' If no overrides nor default values are specified, the value should be 'false'.
          ' A false value implies the latest behavior.
      End If
      
      ' The library can use the value of shouldThrow to throw exceptions or not.
      If shouldThrow Then
          ' old code
      Else
          ' new code
      End If
      

      Ini bermanfaat untuk menggunakan format yang konsisten untuk sakelar, karena mereka adalah kontrak formal yang diekspos oleh pustaka. Berikut ini adalah dua format yang jelas.

      • Switch.namespace.switchname

      • Switch.library.switchname

    • Perubahan pada pola asinkron berbasis tugas (TAP)

      Untuk aplikasi yang menargetkan .NET Framework 4.6, Task dan Task<TResult> objek mewarisi budaya dan budaya UI dari utas panggilan. Perilaku aplikasi yang menargetkan versi .NET Framework sebelumnya, atau yang tidak menargetkan versi .NET Framework tertentu, tidak terpengaruh. Untuk informasi selengkapnya, lihat bagian "Budaya dan operasi asinkron berbasis tugas" dari CultureInfo topik kelas.

      Kelas ini System.Threading.AsyncLocal<T> memungkinkan Anda untuk mewakili data sekitar yang lokal untuk alur kontrol asinkron tertentu, seperti async metode. Ini dapat digunakan untuk mempertahankan data di seluruh utas. Anda juga dapat menentukan metode panggilan balik yang diberi tahu setiap kali data sekitar berubah baik karena AsyncLocal<T>.Value properti diubah secara eksplisit, atau karena utas mengalami transisi konteks.

      Tiga metode kenyamanan, Task.CompletedTask, Task.FromCanceled, dan Task.FromException, telah ditambahkan ke pola asinkron berbasis tugas (TAP) untuk mengembalikan tugas yang selesai dalam keadaan tertentu.

      Kelas NamedPipeClientStream sekarang mendukung komunikasi asinkron dengan ConnectAsync yang baru. metode.

    • EventSource sekarang mendukung penulisan ke log Peristiwa

      Anda sekarang dapat menggunakan kelas EventSource untuk mencatat pesan administratif atau operasional ke log peristiwa, selain sesi ETW yang ada yang dibuat pada komputer. Di masa lalu, Anda harus menggunakan paket NuGet Microsoft.Diagnostics.Tracing.EventSource untuk fungsionalitas ini. Fungsionalitas ini sekarang dibangun ke dalam .NET Framework 4.6.

      Paket NuGet dan .NET Framework 4.6 telah diperbarui dengan fitur-fitur berikut:

      • Peristiwa dinamis

        Memungkinkan peristiwa yang ditentukan "dengan cepat" tanpa membuat metode peristiwa.

      • Payload kaya

        Memungkinkan kelas dan array yang diatribusikan secara khusus serta jenis primitif untuk diteruskan sebagai payload

      • Pelacakan aktivitas

        Menyebabkan peristiwa Mulai dan Hentikan menandai peristiwa di antaranya dengan ID yang mewakili semua aktivitas yang saat ini aktif.

      Untuk mendukung fitur-fitur ini, metode Write yang kelebihan beban telah ditambahkan ke kelas EventSource.

  • Windows Presentation Foundation (WPF)

    • Peningkatan HDPI

      Dukungan HDPI di WPF sekarang lebih baik di .NET Framework 4.6. Perubahan telah dilakukan pada pembulatan tata letak untuk mengurangi instans kliping dalam kontrol dengan batas. Secara default, fitur ini diaktifkan hanya jika TargetFrameworkAttribute Anda diatur ke .NET Framework 4.6. Aplikasi yang menargetkan versi kerangka kerja yang lebih lama tetapi berjalan pada .NET Framework 4.6 dapat memilih perilaku baru dengan menambahkan baris berikut ke bagian < runtime> dari file app.config:

      <AppContextSwitchOverrides
      value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"
      />
      

      Jendela WPF mengangkangi beberapa monitor dengan pengaturan DPI yang berbeda (pengaturan Multi-DPI) sekarang sepenuhnya dirender tanpa wilayah yang dihitamkan. Anda dapat menolak perilaku ini dengan menambahkan baris berikut ke bagian <appSettings> file app.config untuk menonaktifkan perilaku baru ini:

      <add key="EnableMultiMonitorDisplayClipping" value="true"/>
      

      Dukungan untuk memuat kursor yang tepat secara otomatis berdasarkan pengaturan DPI telah ditambahkan ke System.Windows.Input.Cursor.

    • Sentuhan lebih baik

      Laporan pelanggan tentang Koneksi bahwa sentuhan menghasilkan perilaku yang tidak dapat diprediksi telah ditangani dalam .NET Framework 4.6. Ambang batas ketuk ganda untuk aplikasi Windows Store dan aplikasi WPF sekarang sama di Windows 8.1 ke atas.

    • Dukungan jendela turunan transparan

      WPF di .NET Framework 4.6 mendukung jendela turunan transparan di Windows 8.1 ke atas. Ini memungkinkan Anda membuat jendela turunan non-persegi panjang dan transparan di jendela tingkat atas Anda. Anda dapat mengaktifkan fitur ini dengan mengatur properti HwndSourceParameters.UsesPerPixelTransparency ke true.

  • Yayasan Komunikasi Windows (WCF)

    • Dukungan SSL

      WCF sekarang mendukung TLS 1.1 dan TLS 1.2 versi SSL, selain SSL 3.0 dan TLS 1.0, saat menggunakan NetTcp dengan keamanan transportasi dan autentikasi klien. Sekarang dimungkinkan untuk memilih protokol mana yang akan digunakan, atau menonaktifkan protokol lama yang kurang aman. Ini dapat dilakukan baik dengan mengatur properti SslProtocols atau dengan menambahkan yang berikut ini ke file konfigurasi.

      <netTcpBinding>
          <binding>
            <security mode= "None|Transport|Message|TransportWithMessageCredential" >
                <transport clientCredentialType="None|Windows|Certificate"
                          protectionLevel="None|Sign|EncryptAndSign"
                          sslProtocols="Ssl3|Tls1|Tls11|Tls12">
                  </transport>
            </security>
          </binding>
      </netTcpBinding>
      
    • Mengirim pesan menggunakan koneksi HTTP yang berbeda

      WCF sekarang memungkinkan pengguna untuk memastikan pesan tertentu dikirim menggunakan koneksi HTTP yang mendasar yang berbeda. Ada dua cara untuk melakukannya:

      • Menggunakan awalan nama grup koneksi

        Pengguna dapat menentukan string yang akan digunakan WCF sebagai awalan untuk nama grup koneksi. Dua pesan dengan awalan yang berbeda dikirim menggunakan koneksi HTTP yang mendasari yang berbeda. Anda mengatur awalan dengan menambahkan pasangan kunci/nilai ke properti pesan Message.Properties. Kuncinya adalah "HttpTransportConnectionGroupNamePrefix"; nilai adalah awalan yang diinginkan.

      • Menggunakan pabrik saluran yang berbeda

        Pengguna juga dapat mengaktifkan fitur yang memastikan bahwa pesan yang dikirim menggunakan saluran yang dibuat oleh pabrik saluran yang berbeda akan menggunakan koneksi HTTP yang mendasar yang berbeda. Untuk mengaktifkan fitur ini, pengguna harus mengatur appSetting berikut ke true:

        <appSettings>
            <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" />
        </appSettings>
        
  • Windows Workflow Foundation (WWF)

    Anda sekarang dapat menentukan jumlah detik yang akan dipegang layanan alur kerja ke permintaan operasi yang tidak berurutan ketika ada marka buku "non-protokol" yang luar biasa sebelum waktu permintaan habis. Marka buku "non-protokol" adalah marka buku yang tidak terkait dengan aktivitas Terima yang luar biasa. Beberapa aktivitas membuat marka buku non-protokol dalam implementasinya, sehingga mungkin tidak jelas bahwa marka buku non-protokol ada. Ini termasuk Status dan Pilih. Jadi, jika Anda memiliki layanan alur kerja yang diimplementasikan dengan mesin status atau berisi aktivitas Pilih, kemungkinan besar Anda akan memiliki marka buku non-protokol. Anda menentukan interval dengan menambahkan baris seperti berikut ini ke bagian appSettings file app.config Anda:

    <add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>
    

    Nilai default-nya adalah 60 detik. Jika value diatur ke 0, permintaan di luar urutan segera ditolak dengan kesalahan dengan teks yang terlihat seperti ini:

    Operation 'Request3|{http://tempuri.org/}IService' on service instance with identifier '2b0667b6-09c8-4093-9d02-f6c67d534292' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.
    

    Ini adalah pesan yang sama yang Anda terima jika pesan operasi yang tidak berurutan diterima dan tidak ada marka buku non-protokol.

    Jika nilai elemen FilterResumeTimeoutInSeconds bukan nol, ada marka buku non-protokol, dan interval batas waktu berakhir, operasi gagal dengan pesan batas waktu.

  • Transaksi

    Anda sekarang dapat menyertakan pengidentifikasi transaksi terdistribusi untuk transaksi yang telah menyebabkan pengecualian yang berasal dari TransactionException dilemparkan. Anda melakukan ini dengan menambahkan kunci berikut ke appSettings bagian file app.config Anda:

    <add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>
    

    Nilai defaultnya adalah false.

  • Jaringan

    • Penggunaan kembali soket

      Windows 10 mencakup algoritma jaringan skalabilitas tinggi baru yang memanfaatkan sumber daya mesin dengan lebih baik dengan menggunakan kembali port lokal untuk koneksi TCP keluar. .NET Framework 4.6 mendukung algoritma baru, memungkinkan aplikasi .NET untuk memanfaatkan perilaku baru. Dalam versi Windows sebelumnya, ada batas koneksi bersamaan buatan (biasanya 16.384, ukuran default rentang port dinamis), yang dapat membatasi skalabilitas layanan dengan menyebabkan kelelahan port saat dimuat.

      Dalam .NET Framework 4.6, dua API telah ditambahkan untuk mengaktifkan penggunaan kembali port, yang secara efektif menghapus batas 64 KB pada koneksi bersamaan:

      Secara default, properti ServicePointManager.ReusePort adalah false kecuali nilai HWRPortReuseOnSocketBind dari kunci registri HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 diatur ke 0x1. Untuk mengaktifkan penggunaan kembali port lokal pada koneksi HTTP, atur properti ServicePointManager.ReusePort ke true. Ini menyebabkan semua koneksi soket TCP keluar dari HttpClient dan HttpWebRequest menggunakan opsi soket Windows 10 baru, SO_REUSE_UNICASTPORT, yang memungkinkan penggunaan kembali port lokal.

      Pengembang yang menulis aplikasi khusus soket dapat menentukan opsi System.Net.Sockets.SocketOptionName saat memanggil metode seperti Socket.SetSocketOption sehingga soket keluar menggunakan kembali port lokal selama pengikatan.

    • Dukungan untuk nama domain internasional dan PunyCode

      Properti baru, IdnHost, telah ditambahkan ke kelas Uri untuk mendukung nama domain internasional dan PunyCode dengan lebih baik.

  • Mengubah ukuran dalam kontrol Formulir Windows.

    Fitur ini telah diperluas di .NET Framework 4.6 untuk menyertakan jenis DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn dan ToolStripSplitButton dan persegi panjang yang ditentukan oleh properti Bounds yang digunakan saat menggambar UITypeEditor.

    Ini adalah fitur pilih ikut. Untuk mengaktifkannya, atur elemen EnableWindowsFormsHighDpiAutoResizing ke true dalam file konfigurasi aplikasi (app.config):

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Dukungan untuk pengodean halaman kode

    .NET Core terutama mendukung pengodean Unicode dan secara default memberikan dukungan terbatas untuk pengodean halaman kode. Anda dapat menambahkan dukungan untuk pengodean halaman kode yang tersedia di .NET Framework tetapi tidak didukung di .NET Core dengan mendaftarkan pengodean halaman kode dengan metode Encoding.RegisterProvider. Untuk informasi selengkapnya, lihat System.Text.CodePagesEncodingProvider.

  • .NET Native

Aplikasi Universal Windows Platform (UWP) yang ditulis dalam C# atau Visual Basic dapat memanfaatkan teknologi baru yang mengkompilasi aplikasi ke kode asli daripada IL. Teknologi ini menghasilkan aplikasi yang memiliki waktu mulai dan eksekusi yang lebih cepat. Untuk informasi selengkapnya, lihat Mengkompilasi Aplikasi dengan .NET Native. Untuk gambaran umum .NET Native yang memeriksa perbedaannya dari kompilasi JIT dan NGEN dan apa artinya untuk kode Anda, lihat .NET Native dan Kompilasi.

Aplikasi Anda dikompilasi ke kode asli secara default saat Anda mengkompilasinya dengan Visual Studio 2015 atau yang lebih baru. Untuk informasi selengkapnya, lihat Mulai menggunakan .NET Native.

Untuk mendukung penelusuran kesalahan aplikasi .NET Native, sejumlah antarmuka dan enumerasi baru telah ditambahkan ke API debugging yang tidak dikelola. Untuk informasi selengkapnya, lihat topik Penelusuran kesalahan (Referensi API Tidak Terkelola).

Apa yang baru dalam .NET Framework 4.5.2

  • API baru untuk aplikasi ASP.NET. Metode HttpResponse.AddOnSendingHeaders dan HttpResponseBase.AddOnSendingHeaders baru memungkinkan Anda memeriksa dan memodifikasi header respons dan kode status saat respons sedang dibersihkan ke aplikasi klien. Pertimbangkan untuk menggunakan metode ini alih-alih peristiwa PreSendRequestHeaders dan PreSendRequestContent; mereka lebih efisien dan dapat diandalkan.

    Metode HostingEnvironment.QueueBackgroundWorkItem memungkinkan Anda menjadwalkan item kerja latar belakang kecil. ASP.NET melacak item ini dan mencegah IIS menghentikan proses pekerja secara mendadak hingga semua item kerja latar belakang selesai. Metode ini tidak dapat dipanggil di luar domain aplikasi terkelola ASP.NET.

    Properti HttpResponse.HeadersWritten dan HttpResponseBase.HeadersWritten baru mengembalikan nilai Boolean yang menunjukkan apakah header respons telah ditulis. Anda dapat menggunakan properti ini untuk memastikan bahwa panggilan ke API seperti HttpResponse.StatusCode (yang melemparkan pengecualian jika header telah ditulis) akan berhasil.

  • Mengubah ukuran dalam kontrol Formulir Windows. Fitur ini telah diperluas. Sekarang Anda dapat menggunakan pengaturan DPI sistem untuk mengubah ukuran komponen kontrol tambahan berikut (misalnya, panah turun bawah dalam kotak kombo):

    Ini adalah fitur pilih ikut. Untuk mengaktifkannya, atur elemen EnableWindowsFormsHighDpiAutoResizing ke true dalam file konfigurasi aplikasi (app.config):

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Fitur alur kerja baru. Manajer sumber daya yang menggunakan metode EnlistPromotableSinglePhase (dan karenanya menerapkan antarmuka IPromotableSinglePhaseNotification) dapat menggunakan metode baru Transaction.PromoteAndEnlistDurable untuk meminta hal berikut:

    Ini dapat dilakukan dalam domain aplikasi yang sama, dan tidak memerlukan kode tambahan yang tidak dikelola untuk berinteraksi dengan MSDTC untuk melakukan promosi. Metode baru hanya dapat dipanggil ketika ada panggilan luar biasa dari System.Transactions ke metode IPromotableSinglePhaseNotificationPromote yang diterapkan oleh pendaftaran yang dapat dipromosikan.

  • Peningkatan pembuatan profil. API pembuatan profil baru yang tidak dikelola berikut ini menyediakan pembuatan profil yang lebih kuat:

    Implementasi ICorProfiler sebelumnya mendukung pemuatan malas rakitan dependen. API pembuatan profil baru memerlukan rakitan dependen yang disuntikkan oleh profiler agar dapat segera dimuat, alih-alih dimuat setelah aplikasi sepenuhnya diinisialisasi. Perubahan ini tidak memengaruhi pengguna API ICorProfiler yang ada.

  • Penyempurnaan penelusuran kesalahan. API penelusuran kesalahan baru yang tidak dikelola berikut ini menyediakan integrasi yang lebih baik dengan profiler. Anda sekarang dapat mengakses metadata yang dimasukkan oleh profiler serta variabel lokal dan kode yang dihasilkan oleh permintaan ReJIT kompilator saat mencadangkan penelusuran kesalahan.

  • Perubahan pelacakan peristiwa. .NET Framework 4.5.2 memungkinkan aktivitas berbasis pelacakan peristiwa untuk Windows (ETW) yang tidak diproses untuk area permukaan yang lebih besar. Ini memungkinkan vendor Advanced Power Management (APM) untuk menyediakan alat ringan yang secara akurat melacak biaya permintaan dan aktivitas individu yang melintasi utas. Peristiwa ini dimunculkan hanya ketika pengontrol ETW mengaktifkannya; oleh karena itu, perubahan tidak memengaruhi kode ETW atau kode yang ditulis sebelumnya yang berjalan dengan ETW dinonaktifkan.

  • Mempromosikan transaksi dan mengonversinya menjadi pendaftaran yang tahan lama

    Transaction.PromoteAndEnlistDurable adalah API baru yang ditambahkan ke .NET Framework 4.5.2 dan 4.6:

    [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")]
    public Enlistment PromoteAndEnlistDurable(Guid resourceManagerIdentifier,
                                              IPromotableSinglePhaseNotification promotableNotification,
                                              ISinglePhaseNotification enlistmentNotification,
                                              EnlistmentOptions enlistmentOptions)
    
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name:="FullTrust")>
    public Function PromoteAndEnlistDurable(resourceManagerIdentifier As Guid,
                                            promotableNotification As IPromotableSinglePhaseNotification,
                                            enlistmentNotification As ISinglePhaseNotification,
                                            enlistmentOptions As EnlistmentOptions) As Enlistment
    

    Metode ini dapat digunakan oleh pendaftaran yang sebelumnya dibuat oleh Transaction.EnlistPromotableSinglePhase sebagai respons terhadap metode ITransactionPromoter.Promote. Ini meminta System.Transactions untuk mempromosikan transaksi ke transaksi MSDTC dan untuk "mengonversi" pendaftaran yang dapat dipromosikan ke pendaftaran yang tahan lama. Setelah metode ini berhasil diselesaikan, antarmuka IPromotableSinglePhaseNotification tidak akan lagi dirujuk oleh System.Transactions, dan pemberitahuan di masa mendatang akan tiba di antarmuka ISinglePhaseNotification yang disediakan. Pendaftaran yang dimaksud harus bertindak sebagai pendaftaran yang tahan lama, mendukung pencatatan dan pemulihan transaksi. Lihat Transaction.EnlistDurable untuk detailnya. Selain itu, pendaftaran harus mendukung ISinglePhaseNotification. Metode ini hanya dapat dipanggil saat memproses panggilan ITransactionPromoter.Promote. Jika tidak demikian, pengecualian TransactionException akan dilemparkan.

Apa yang baru dalam .NET Framework 4.5.1

Pembaruan April 2014:

  • Visual Studio 2013 Pembaruan 2 menyertakan pembaruan untuk templat Pustaka Kelas Portabel untuk mendukung skenario ini:

    • Anda dapat menggunakan API runtime Windows di pustaka portabel yang menargetkan Windows 8.1, Windows Phone 8.1, dan Windows Phone Silverlight 8.1.

    • Anda dapat menyertakan XAML (Jenis Windows.UI.XAML) di pustaka portabel saat Anda menargetkan Windows 8.1 atau Windows Phone 8.1. Templat XAML berikut didukung: Halaman Kosong, Kamus Sumber Daya, Kontrol Templat, dan Kontrol Pengguna.

    • Anda dapat membuat komponen Windows Runtime portabel (file .winmd) untuk digunakan di aplikasi Store yang menargetkan Windows 8.1 dan Windows Phone 8.1.

    • Anda dapat menargetkan ulang Windows Store atau pustaka kelas Windows Phone Store seperti Pustaka Kelas Portabel.

    Untuk informasi selengkapnya tentang perubahan ini, lihat Pustaka Kelas Portabel.

  • Kumpulan konten .NET Framework sekarang mencakup dokumentasi untuk .NET Native, yang merupakan teknologi prakompilasi untuk membangun dan menyebarkan aplikasi Windows. .NET Native mengkompilasi aplikasi Anda langsung ke kode asli, daripada ke bahasa perantara (IL), untuk performa yang lebih baik. Untuk detailnya, lihat Mengkompilasi Aplikasi dengan .NET Native.

  • Sumber Referensi .NET Framework memberikan pengalaman penjelajahan baru dan fungsionalitas yang ditingkatkan. Anda sekarang dapat menelusuri kode sumber .NET Framework online, mengunduh referensi untuk dilihat secara offline, dan melangkah melalui sumber (termasuk tambalan dan pembaruan) selama penelusuran kesalahan. Untuk informasi selengkapnya, lihat entri blog Pencarian baru untuk Sumber Referensi .NET.

Fitur dan penyempurnaan baru di kelas dasar di .NET Framework 4.5.1 meliputi:

  • Pengalihan pengikatan otomatis untuk rakitan. Dimulai dengan Visual Studio 2013, saat Anda mengkompilasi aplikasi yang menargetkan .NET Framework 4.5.1, pengalihan pengikatan dapat ditambahkan ke file konfigurasi aplikasi jika aplikasi Anda atau komponennya mereferensikan beberapa versi perakitan yang sama. Anda juga dapat mengaktifkan fitur ini untuk proyek yang menargetkan versi .NET Framework yang lebih lama. Untuk informasi selengkapnya, lihat Cara: Mengaktifkan dan Menonaktifkan Analisis Kode Otomatis.

  • Kemampuan untuk mengumpulkan informasi diagnostik untuk membantu pengembang meningkatkan performa aplikasi server dan cloud. Untuk informasi selengkapnya, lihat metode WriteEventWithRelatedActivityId dan WriteEventWithRelatedActivityIdCore di kelas EventSource.

  • Kemampuan untuk secara eksplisit memampatkan tumpukan objek besar (LOH) selama pengumpulan sampah. Untuk informasi selengkapnya, lihat GCSettings.LargeObjectHeapCompactionMode properti.

  • Peningkatan performa tambahan seperti penangguhan aplikasi ASP.NET, peningkatan JIT multi-inti, dan memulai aplikasi yang lebih cepat setelah pembaruan .NET Framework. Untuk detailnya, lihat pengumuman .NET Framework 4.5.1 dan posting blog penangguhan aplikasi ASP.NET.

Penyempurnaan Formulir Windows meliputi:

  • Mengubah ukuran dalam kontrol Formulir Windows. Anda dapat menggunakan pengaturan DPI sistem untuk mengubah ukuran komponen kontrol (misalnya, ikon yang muncul di kisi properti) dengan memilih entri dalam file konfigurasi aplikasi (app.config) untuk aplikasi Anda. Fitur ini saat ini didukung dalam kontrol Formulir Windows berikut:

    Untuk mengaktifkan fitur ini, tambahkan elemen <appSettings> baru ke file konfigurasi (app.config) dan atur elemen EnableWindowsFormsHighDpiAutoResizing ke true:

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    

Peningkatan saat menelusuri kesalahan aplikasi .NET Framework Anda di Visual Studio 2013 meliputi:

  • Mengembalikan nilai dalam penelusuran kesalahan Visual Studio. Saat Anda men-debug aplikasi terkelola di Visual Studio 2013, jendela Autos menampilkan jenis dan nilai pengembalian untuk metode. Informasi ini tersedia untuk aplikasi desktop, Windows Store, dan Windows Phone. Untuk informasi selengkapnya, lihat Memeriksa nilai pengembalian panggilan metode.

  • Edit dan Lanjutkan untuk aplikasi 64-bit. Visual Studio 2013 mendukung fitur Edit dan Lanjutkan untuk aplikasi terkelola 64-bit untuk desktop, Windows Store, dan Windows Phone. Batasan yang ada tetap berlaku untuk aplikasi 32-bit dan 64-bit (lihat bagian terakhir dari artikel Perubahan Kode yang Didukung (C#)).

  • Penelusuran kesalahan sadar asinkron. Untuk mempermudah debug aplikasi asinkron di Visual Studio 2013, tumpukan panggilan menyembunyikan kode infrastruktur yang disediakan oleh kompilator untuk mendukung pemrograman asinkron, dan juga rantai dalam bingkai induk logis sehingga Anda dapat mengikuti eksekusi program logis dengan lebih jelas. Jendela Tugas menggantikan jendela Tugas Paralel dan menampilkan tugas yang terkait dengan titik henti tertentu, dan juga menampilkan tugas lain yang saat ini aktif atau dijadwalkan di aplikasi. Anda dapat membaca tentang fitur ini di bagian "Penelusuran kesalahan sadar asinkron" dari pengumuman .NET Framework 4.5.1.

  • Dukungan pengecualian yang lebih baik untuk komponen runtime Windows. Di Windows 8.1, pengecualian yang muncul dari aplikasi Windows Store mempertahankan informasi tentang kesalahan yang menyebabkan pengecualian, bahkan di seluruh batas bahasa. Anda dapat membaca tentang fitur ini di bagian "pengembangan aplikasi Windows Store" dari pengumuman .NET Framework 4.5.1.

Dimulai dengan Visual Studio 2013, Anda dapat menggunakan Alat Pengoptimalan Terpandu Profil Terkelola (Mpgo.exe) untuk mengoptimalkan aplikasi Windows 8.x Store serta aplikasi desktop.

Untuk fitur baru di ASP.NET 4.5.1, lihat ASP.NET dan Web Tools untuk Catatan Rilis Visual Studio 2013.

Apa yang baru dalam .NET Framework 4.5

Kelas dasar

  • Kemampuan untuk mengurangi hidupkan ulang sistem dengan mendeteksi dan menutup aplikasi .NET Framework 4 selama penyebaran. Lihat Mengurangi Penghidupan Ulang Sistem Selama Instalasi .NET Framework 4.5.

  • Dukungan untuk array yang lebih besar dari 2 gigabyte (GB) pada platform 64-bit. Fitur ini dapat diaktifkan dalam file konfigurasi aplikasi. Lihat elemen <gcAllowVeryLargeObjects>, yang juga mencantumkan batasan lain pada ukuran objek dan ukuran array.

  • Performa yang lebih baik melalui pengumpulan sampah latar belakang untuk server. Saat Anda menggunakan pengumpulan sampah server di .NET Framework 4.5, pengumpulan sampah latar belakang diaktifkan secara otomatis. Lihat bagian Pengumpulan Sampah Server Latar Belakang dari topik Dasar-Dasar Pengumpulan Sampah.

  • Kompilasi latar belakang just-in-time (JIT), yang secara opsional tersedia pada prosesor multi-inti untuk meningkatkan performa aplikasi. Lihat ProfileOptimization.

  • Kemampuan untuk membatasi berapa lama mesin ekspresi reguler akan mencoba menyelesaikan ekspresi reguler sebelum waktu habis. Lihat properti Regex.MatchTimeout.

  • Kemampuan untuk menentukan budaya default untuk domain aplikasi. Lihat kelas CultureInfo.

  • Dukungan konsol untuk pengodean Unicode (UTF-16). Lihat kelas Console.

  • Dukungan untuk pembuatan versi urutan string budaya dan data perbandingan. Lihat kelas SortVersion.

  • Performa yang lebih baik saat mengambil sumber daya. Lihat Paket dan sebarkan sumber daya.

  • Peningkatan kompresi zip untuk mengurangi ukuran file terkompresi. Lihat namespace layanan System.IO.Compression.

  • Kemampuan untuk menyesuaikan konteks pantulan untuk mengambil alih perilaku pantulan default melalui kelas CustomReflectionContext.

  • Dukungan untuk versi 2008 dari standar Nama Domain Internasional dalam Aplikasi (IDNA) saat kelas System.Globalization.IdnMapping digunakan pada Windows 8.

  • Delegasi perbandingan string dengan sistem operasi, yang mengimplementasikan Unicode 6.0, ketika .NET Framework digunakan pada Windows 8. Saat berjalan di platform lain, .NET Framework menyertakan data perbandingan stringnya sendiri, yang mengimplementasikan Unicode 5.x. Lihat kelas String dan bagian Keterangan kelas SortVersion .

  • Kemampuan untuk menghitung kode hash untuk string berdasarkan domain per aplikasi. Lihat elemen <UseRandomizedStringHashAlgorithm>.

  • Dukungan refleksi jenis dibagi antara kelas Type dan TypeInfo. Lihat Refleksi di .NET Framework untuk Aplikasi Windows Store.

Kerangka Kerja Ekstensibilitas Terkelola (MEF)

Di .NET Framework 4.5, Kerangka Kerja Ekstensibilitas Terkelola (MEF) menyediakan fitur baru berikut:

  • Dukungan untuk jenis generik.

  • Model pemrograman berbasis konvensi yang memungkinkan Anda membuat suku cadang berdasarkan konvensi penamaan daripada atribut.

  • Beberapa lingkup.

  • Subset MEF yang dapat Anda gunakan saat membuat aplikasi Windows 8.x Store. Subset ini tersedia sebagai paket yang dapat diunduh dari Galeri NuGet. Untuk memasang paket, buka proyek Anda di Visual Studio, pilih Kelola Paket NuGet dari menu Project, dan cari paket Microsoft.Composition secara online.

Untuk informasi selengkapnya, lihat Kerangka Kerja Ekstensibilitas Terkelola (MEF).

Operasi file asinkron

Dalam .NET Framework 4.5, fitur asinkron baru ditambahkan ke bahasa C# dan Visual Basic. Fitur-fitur ini menambahkan model berbasis tugas untuk melakukan operasi asinkron. Untuk menggunakan model baru ini, gunakan metode asinkron di kelas I/O. Lihat File Asinkron I/O.

Alat

Di .NET Framework 4.5, Generator File Sumber Daya (Resgen.exe) memungkinkan Anda membuat file .resw untuk digunakan di aplikasi Windows 8.x Store dari file .resources yang disematkan dalam rakitan .NET Framework. Untuk informasi selengkapnya, lihat Resgen.exe (Generator File Sumber Daya).

Pengoptimalan Terpandu Profil Terkelola (Mpgo.exe) memungkinkan Anda meningkatkan waktu mulai aplikasi, pemanfaatan memori (ukuran set kerja), dan throughput dengan mengoptimalkan rakitan gambar asli. Alat baris perintah menghasilkan data profil untuk rakitan aplikasi gambar asli. Lihat Mpgo.exe (Alat Pengoptimalan Terpandu Profil Terkelola). Dimulai dengan Visual Studio 2013, Anda dapat menggunakan Mpgo.exe untuk mengoptimalkan aplikasi Windows 8.x Store serta aplikasi desktop.

Komputasi paralel

.NET Framework 4.5 menyediakan beberapa fitur dan peningkatan baru untuk komputasi paralel. Ini termasuk peningkatan performa, peningkatan kontrol, peningkatan dukungan untuk pemrograman asinkron, pustaka aliran data baru, dan dukungan yang ditingkatkan untuk penelusuran kesalahan paralel dan analisis performa. Lihat entri Apa yang Baru untuk Paralelisme di .NET Framework 4.5 di blog Pemrograman Paralel dengan .NET.

Web

ASP.NET 4.5 dan 4.5.1 menambahkan pengikatan model untuk Formulir Web, dukungan WebSocket, penangan asinkron, peningkatan performa, dan banyak fitur lainnya. Untuk informasi selengkapnya, lihat sumber berikut ini:

Jaringan

.NET Framework 4.5 menyediakan antarmuka pemrograman baru untuk aplikasi HTTP. Untuk informasi selengkapnya, lihat namespaces System.Net.Http dan System.Net.Http.Headers baru.

Dukungan juga disertakan untuk antarmuka pemrograman baru untuk menerima dan berinteraksi dengan koneksi WebSocket dengan menggunakan kelas HttpListener yang ada dan terkait. Untuk informasi selengkapnya, lihat namespace baru System.Net.WebSockets dan kelas HttpListener.

Selain itu, .NET Framework 4.5 mencakup peningkatan jaringan berikut:

  • Dukungan URI yang mematuhi RFC. Untuk informasi selengkapnya, lihat Uri dan kelas terkait.

  • Dukungan untuk penguraian Nama Domain Internasional (IDN). Untuk informasi selengkapnya, lihat Uri dan kelas terkait.

  • Dukungan untuk Internasionalisasi Alamat Email (EAI). Untuk informasi lebih lanjut, lihat namespace layanan System.Net.Mail.

  • Dukungan IPv6 yang disempurnakan. Untuk informasi lebih lanjut, lihat namespace layanan System.Net.NetworkInformation.

  • Dukungan soket mode ganda. Untuk informasi selengkapnya, lihat kelas Socket dan TcpListener.

Windows Presentation Foundation (WPF)

Dalam .NET Framework 4.5, Windows Presentation Foundation (WPF) berisi perubahan dan peningkatan di area berikut:

  • Kontrol baru Ribbon, yang memungkinkan Anda menerapkan antarmuka pengguna pita yang menghosting Toolbar Akses Cepat, Menu Aplikasi, dan tab.

  • Antarmuka baru INotifyDataErrorInfo, yang mendukung validasi data sinkron dan asinkron.

  • Fitur baru untuk kelas VirtualizingPanel dan Dispatcher.

  • Peningkatan performa saat menampilkan sekumpulan besar data yang dikelompokkan, dan dengan mengakses koleksi pada utas non-UI.

  • Pengikatan data ke properti statis, pengikatan data ke jenis kustom yang mengimplementasikan antarmuka ICustomTypeProvider, dan pengambilan informasi pengikatan data dari ekspresi pengikatan.

  • Memposisikan ulang data saat nilai berubah (pembentukan langsung).

  • Kemampuan untuk memeriksa apakah konteks data untuk kontainer item terputus.

  • Kemampuan untuk mengatur jumlah waktu yang harus berlalu antara perubahan properti dan pembaruan sumber data.

  • Peningkatan dukungan untuk menerapkan pola peristiwa yang lemah. Selain itu, peristiwa sekarang dapat menerima ekstensi markup.

Yayasan Komunikasi Windows (WCF)

Dalam .NET Framework 4.5, fitur berikut telah ditambahkan untuk mempermudah penulisan dan pemeliharaan aplikasi Windows Communication Foundation (WCF):

  • Penyederhanaan file konfigurasi yang dihasilkan.

  • Dukungan untuk pengembangan kontrak-pertama.

  • Kemampuan untuk mengonfigurasi mode kompatibilitas ASP.NET lebih mudah.

  • Perubahan nilai properti transportasi default untuk mengurangi kemungkinan Anda harus mengaturnya.

  • Pembaruan pada kelas XmlDictionaryReaderQuotas untuk mengurangi kemungkinan Anda harus mengonfigurasi kuota secara manual untuk pembaca kamus XML.

  • Validasi file konfigurasi WCF dengan Visual Studio sebagai bagian dari proses pembuatan, sehingga Anda dapat mendeteksi kesalahan konfigurasi sebelum menjalankan aplikasi.

  • Dukungan streaming asinkron baru.

  • Pemetaan protokol HTTPS baru untuk mempermudah mengekspos titik akhir melalui HTTPS dengan Layanan Informasi Internet (IIS).

  • Kemampuan untuk menghasilkan metadata dalam satu dokumen WSDL dengan menambahkan ?singleWSDL ke URL layanan.

  • Dukungan websockets untuk memungkinkan komunikasi dua arah sejati melalui port 80 dan 443 dengan karakteristik kinerja yang mirip dengan transportasi TCP.

  • Dukungan untuk mengonfigurasi layanan dalam kode.

  • Tooltips Editor XML.

  • ChannelFactory dukungan penembolokan.

  • Dukungan kompresi encoder biner.

  • Dukungan untuk transportasi UDP yang memungkinkan pengembang menulis layanan yang menggunakan pesan "aktifkan dan lupakan". Klien mengirim pesan ke layanan dan mengharapkan respons dari layanan.

  • Kemampuan untuk mendukung beberapa mode autentikasi pada satu titik akhir WCF saat menggunakan transportasi HTTP dan keamanan transportasi.

  • Dukungan untuk layanan WCF yang menggunakan nama domain internasional (IDN).

Untuk informasi selengkapnya, lihat Apa yang Baru di Windows Communication Foundation.

Windows Workflow Foundation (WF)

Dalam .NET Framework 4.5, beberapa fitur baru ditambahkan ke Windows Workflow Foundation (WF), termasuk:

  • Alur kerja mesin status, yang pertama kali diperkenalkan sebagai bagian dari .NET Framework 4.0.1 (Pembaruan Platfrom 1 .NET Framework 4). Pembaruan ini mencakup beberapa kelas dan aktivitas baru yang memungkinkan pengembang membuat alur kerja mesin status. Kelas dan aktivitas ini diperbarui untuk .NET Framework 4.5 untuk mencakup:

    • Kemampuan untuk mengatur titik henti pada status.

    • Kemampuan untuk menyalin dan menempelkan transisi di perancang alur kerja.

    • Dukungan perancang untuk pembuatan transisi pemicu bersama.

    • Aktivitas untuk membuat alur kerja mesin status, termasuk: StateMachine, State,dan Transition.

  • Fitur Perancang Alur Kerja yang Disempurnakan seperti berikut ini:

    • Kapabilitas pencarian alur kerja yang disempurnakan di Visual Studio, termasuk Temukan Cepat dan Temukan di File.

    • Kemampuan untuk secara otomatis membuat aktivitas Urutan ketika aktivitas turunan kedua ditambahkan ke aktivitas kontainer, dan untuk menyertakan kedua aktivitas dalam aktivitas Urutan.

    • Dukungan pengalihan, yang memungkinkan bagian alur kerja yang terlihat diubah tanpa menggunakan bilah gulir.

    • Tampilan Kerangka Dokumen baru yang memperlihatkan komponen alur kerja dalam tampilan kerangka gaya pohon dan memungkinkan Anda memilih komponen dalam tampilan Kerangka Dokumen.

    • Kemampuan untuk menambahkan anotasi ke aktivitas.

    • Kemampuan untuk menentukan dan mengonsumsi delegasi aktivitas dengan menggunakan desainer alur kerja.

    • Sambungkan otomatis dan sisipkan otomatis untuk aktivitas dan transisi dalam alur kerja mesin status dan diagram alur.

  • Penyimpanan informasi status tampilan untuk alur kerja dalam satu elemen dalam file XAML, sehingga Anda dapat dengan mudah menemukan dan mengedit informasi status tampilan.

  • Aktivitas kontainer NoPersistScope untuk mencegah aktivitas turunan bertahan.

  • Dukungan untuk ekspresi C#:

    • Proyek alur kerja yang menggunakan Visual Basic akan menggunakan ekspresi Visual Basic, dan proyek alur kerja C# akan menggunakan ekspresi C#.

    • Proyek alur kerja C# yang dibuat pada Visual Studio 2010 dan memiliki ekspresi Visual Basic kompatibel dengan proyek alur kerja C# yang menggunakan ekspresi C#.

  • Penyempurnaan penerapan versi:

    • Kelas WorkflowIdentity baru, yang menyediakan pemetaan antara instans alur kerja yang bertahan dan definisi alur kerjanya.

    • Eksekusi berdampingan dari beberapa versi alur kerja di host yang sama, termasuk WorkflowServiceHost.

    • Dalam Pembaruan Dinamis, kemampuan untuk memodifikasi definisi instans alur kerja yang bertahan.

  • Pengembangan layanan alur kerja pertama kontrak, yang menyediakan dukungan untuk menghasilkan aktivitas secara otomatis agar sesuai dengan kontrak layanan yang ada.

Untuk informasi selengkapnya, lihat Apa yang Baru di Windows Workflow Foundation.

.NET untuk aplikasi Windows 8.x Store

Aplikasi Windows 8.x Store dirancang untuk faktor bentuk tertentu dan memanfaatkan kekuatan sistem operasi Windows. Subset .NET Framework 4.5 atau 4.5.1 tersedia untuk membangun aplikasi Windows 8.x Store untuk Windows dengan menggunakan C# atau Visual Basic. Subset ini disebut .NET untuk aplikasi Windows 8.x Store dan dibahas dalam gambaran umum.

Pustaka Kelas Portabel

Proyek Pustaka Kelas Portabel di Visual Studio 2012 (dan versi yang lebih baru) memungkinkan Anda menulis dan membangun rakitan terkelola yang berfungsi pada beberapa platform .NET Framework. Dengan menggunakan proyek Pustaka Kelas Portabel, Anda memilih platform (seperti Windows Phone dan .NET untuk aplikasi Windows 8.x Store) untuk ditargetkan. Jenis dan anggota yang tersedia dalam proyek Anda secara otomatis dibatasi untuk jenis dan anggota umum di seluruh platform ini. Untuk informasi selengkapnya, lihat Pustaka Kelas Portabel.

Lihat juga