Bagikan melalui


Yang baru di .NET 6

.NET 6 memberikan bagian akhir dari rencana unifikasi .NET yang dimulai dengan .NET 5. .NET 6 menyatukan SDK, pustaka dasar, dan runtime di seluruh aplikasi seluler, desktop, IoT, dan cloud. Selain penyatuan ini, ekosistem .NET 6 menawarkan:

  • Pengembangan yang disederhanakan: Memulai itu mudah. Fitur bahasa baru di C# 10 mengurangi jumlah kode yang perlu Anda tulis. Dan investasi dalam tumpukan web dan API minimal memudahkan untuk dengan cepat menulis layanan mikro yang lebih kecil dan lebih cepat.

  • Performa yang lebih baik: .NET 6 adalah kerangka kerja web tumpukan penuh tercepat, yang menurunkan biaya komputasi jika Anda menjalankan di cloud.

  • Produktivitas utama: .NET 6 dan Visual Studio 2022 menyediakan isi ulang panas, alat git baru, pengeditan kode cerdas, alat diagnostik dan pengujian yang kuat, dan kolaborasi tim yang lebih baik.

.NET 6 akan didukung selama tiga tahun sebagai rilis dukungan jangka panjang (LTS).

Fitur pratinjau dinonaktifkan secara default. Mereka juga tidak didukung untuk digunakan dalam produksi dan dapat dihapus dalam versi mendatang. Yang baru RequiresPreviewFeaturesAttribute digunakan untuk membuat anotasi API pratinjau, dan penganalisis terkait memberi tahu Anda jika Anda menggunakan API pratinjau ini.

.NET 6 didukung oleh Visual Studio 2022 dan Visual Studio 2022 untuk Mac (dan versi yang lebih baru).

Artikel ini tidak mencakup semua fitur baru .NET 6. Untuk melihat semua fitur baru, dan untuk informasi lebih lanjut tentang fitur yang tercantum dalam artikel ini, lihat posting blog Mengumumkan .NET 6 .

Performa

.NET 6 mencakup banyak peningkatan performa. Bagian ini mencantumkan beberapa peningkatan—di FileStream, pengoptimalan yang dipandu profil, dan kompilasi AOT. Untuk informasi terperinci, lihat Peningkatan performa di posting blog .NET 6 .

FileStream

Jenis System.IO.FileStream telah ditulis ulang untuk .NET 6 untuk memberikan performa dan keandalan yang lebih baik pada Windows. Sekarang, FileStream jangan pernah memblokir ketika dibuat untuk I/O asinkron di Windows. Untuk informasi selengkapnya, lihat peningkatan IO File di posting blog .NET 6 .

Pengoptimalan yang dipandu profil

Pengoptimalan yang dipandu profil (PGO) adalah tempat pengompilasi JIT menghasilkan kode yang dioptimalkan dalam hal jenis dan jalur kode yang paling sering digunakan. .NET 6 memperkenalkan PGO dinamis . PGO dinamis bekerja bersama dengan kompilasi berjenjang untuk lebih mengoptimalkan kode berdasarkan instrumentasi tambahan yang diberlakukan selama tingkat 0. PGO dinamis dinonaktifkan secara default, tetapi Anda dapat mengaktifkannya dengan DOTNET_TieredPGOvariabel lingkungan. Untuk informasi selengkapnya, lihat Peningkatan performa JIT.

Crossgen2

.NET 6 memperkenalkan Crossgen2, penerus Crossgen, yang telah dihapus. Crossgen dan Crossgen2 adalah alat yang menyediakan kompilasi ahead-of-time (AOT) untuk meningkatkan waktu mulai aplikasi. Crossgen2 ditulis dalam C# alih-alih C++, dan dapat melakukan analisis dan pengoptimalan yang tidak dimungkinkan dengan versi sebelumnya. Untuk informasi selengkapnya, lihat Percakapan tentang Crossgen2.

Dukungan Arm64

Rilis .NET 6 mencakup dukungan untuk sistem operasi macOS Arm64 (atau "Apple Silicon") dan Windows Arm64, untuk eksekusi Arm64 asli dan emulasi x64. Selain itu, alat penginstal x64 dan Arm64 .NET sekarang diinstal berdampingan. Untuk informasi selengkapnya, lihat Dukungan .NET untuk macOS 11 dan Windows 11 untuk Arm64 dan x64.

Isi ulang panas

Hot reload adalah fitur yang memungkinkan Anda memodifikasi kode sumber aplikasi dan langsung menerapkan perubahan tersebut ke aplikasi yang sedang berjalan. Tujuan fitur ini adalah untuk meningkatkan produktivitas Anda dengan menghindari menghidupkan ulang aplikasi di antara pengeditan. Hot reload tersedia di Visual Studio 2022 dan dotnet watch alat baris perintah. Hot reload berfungsi dengan sebagian besar jenis aplikasi .NET, dan untuk kode sumber C#, Visual Basic, dan C++. Untuk informasi selengkapnya, lihat posting blog Hot reload.

.NET MAUI

.NET Multi-platform App UI (.NET MAUI) masih dalam pratinjau, dengan kandidat rilis datang pada kuartal pertama 2022 dan ketersediaan umum (GA) pada kuartal kedua 2022. .NET MAUI memungkinkan untuk membangun aplikasi klien asli untuk sistem operasi desktop dan seluler dengan basis kode tunggal. Untuk informasi selengkapnya, lihat posting blog Pembaruan pada .NET Multi-platform App UI .

C# 10 dan templat

C# 10 mencakup inovasi seperti global using arahan, deklarasi namespace cakupan file, dan struktur rekaman. Untuk informasi selengkapnya, lihat Apa yang baru di C# 10.

Dalam konser dengan pekerjaan itu, templat proyek .NET SDK untuk C# telah dimodernisasi untuk menggunakan beberapa fitur bahasa baru:

  • metode async Main
  • Pernyataan tingkat tinggi
  • Ekspresi baru yang diketik-target
  • Arahan implisit global using
  • Namespace cakupan file
  • Jenis referensi yang dapat diubah ke null

Dengan menambahkan fitur bahasa baru ini ke templat proyek, kode baru dimulai dengan fitur yang diaktifkan. Namun, kode yang ada tidak terpengaruh saat Anda meningkatkan ke .NET 6. Untuk informasi selengkapnya tentang perubahan templat ini, lihat posting blog templat proyek .NET SDK: C#.

F# dan Visual Basic

F# 6 menambahkan beberapa perbaikan pada bahasa F# dan F# Interactive. Untuk informasi selengkapnya, lihat Apa yang baru di F# 6.

Visual Basic memiliki peningkatan dalam pengalaman Visual Studio dan startup proyek Formulir Windows.

Beban Kerja SDK

Untuk menjaga ukuran .NET SDK lebih kecil, beberapa komponen telah ditempatkan dalam beban kerja SDK opsional baru. Komponen-komponen ini termasuk .NET MAUI dan Blazor WebAssembly AOT. Jika Anda menggunakan Visual Studio, itu akan mengurus penginstalan beban kerja SDK apa pun yang Anda butuhkan. Jika Anda menggunakan .NET CLI, Anda dapat mengelola beban kerja menggunakan perintah baru dotnet workload :

Perintah Deskripsi
dotnet workload search Mencari beban kerja yang tersedia.
dotnet workload install Menginstal beban kerja tertentu.
dotnet workload uninstall Menghapus beban kerja tertentu.
dotnet workload update Pembaruan beban kerja yang diinstal.
dotnet workload repair Instal ulang semua beban kerja yang diinstal untuk memperbaiki penginstalan yang rusak.
dotnet workload list Mencantumkan beban kerja yang terinstal.

Untuk informasi selengkapnya, lihat Beban kerja SDK opsional.

API System.Text.Json

Banyak peningkatan telah dilakukan di System.Text.Json .NET 6, sehingga sekarang menjadi solusi serialisasi "kekuatan industri".

Generator sumber

.NET 6 menambahkan generator sumber baru untuk System.Text.Json. Pembuatan sumber berfungsi dengan dan dapat dikonfigurasi dengan JsonSerializer berbagai cara. Ini dapat meningkatkan performa, mengurangi penggunaan memori, dan memfasilitasi pemangkasan perakitan. Untuk informasi selengkapnya, lihat Cara memilih refleksi atau pembuatan sumber di System.Text.Json dan Cara menggunakan pembuatan sumber di System.Text.Json.

DOM yang dapat ditulis

Model objek dokumen baru yang dapat ditulis (DOM) telah ditambahkan, yang melengkapi DOM baca-saja yang sudah ada sebelumnya. API baru menyediakan alternatif serialisasi ringan untuk kasus saat penggunaan jenis objek CLR lama biasa (POCO) tidak dimungkinkan. Ini juga memungkinkan Anda untuk menavigasi secara efisien ke subbagian pohon JSON besar dan membaca array atau mendeserialisasi POCO dari subbagian tersebut. Jenis baru berikut telah ditambahkan untuk mendukung DOM yang dapat ditulis:

Untuk informasi selengkapnya, lihat Pilihan JSON DOM.

Serialisasi IAsyncEnumerable

System.Text.Json sekarang mendukung serialisasi dan deserialisasi dengan IAsyncEnumerable<T> instans. Metode serialisasi asinkron menghitung instans apa pun IAsyncEnumerable<T> dalam grafik objek lalu menserialisasikannya sebagai array JSON. Untuk deserialisasi, metode JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) baru ditambahkan. Untuk informasi selengkapnya, lihat Serialisasi IAsyncEnumerable.

API baru lainnya

Antarmuka serialisasi baru untuk validasi dan nilai default:

Untuk informasi selengkapnya, lihat Panggilan balik.

Atribut pemesanan properti baru:

Metode baru untuk menulis JSON "mentah":

Serialisasi dan deserialisasi sinkron ke aliran:

Opsi baru untuk mengabaikan objek saat siklus referensi terdeteksi selama serialisasi:

Untuk informasi selengkapnya tentang serialisasi dan deserialisasi dengan System.Text.Json, lihat serialisasi dan deserialisasi JSON di .NET.

HTTP/3

.NET 6 menyertakan dukungan pratinjau untuk HTTP/3, versi baru HTTP. HTTP/3 memecahkan beberapa tantangan fungsi dan performa yang ada dengan menggunakan protokol koneksi baru yang mendasar yang disebut QUIC. QUIC membangun koneksi lebih cepat, dan koneksi tidak bergantung pada alamat IP, memungkinkan klien seluler untuk menjelajah antara jaringan Wi-fi dan seluler. Untuk informasi selengkapnya, lihat Menggunakan HTTP/3 dengan HttpClient.

Inti ASP.NET

ASP.NET Core mencakup peningkatan api minimal, kompilasi ahead-of-time (AOT) untuk aplikasi Blazor WebAssembly, dan aplikasi satu halaman. Selain itu, komponen Blazor sekarang dapat dirender dari JavaScript dan terintegrasi dengan aplikasi berbasis JavaScript yang ada. Untuk informasi selengkapnya, lihat Apa yang baru di ASP.NET Core 6.

OpenTelemetry

.NET 6 menghadirkan dukungan yang ditingkatkan untuk OpenTelemetry, yang merupakan kumpulan alat, API, dan SDK yang membantu Anda menganalisis performa dan perilaku perangkat lunak Anda. API di System.Diagnostics.Metrics namespace mengimplementasikan spesifikasi API Metrik OpenTelemetry. Misalnya, ada empat kelas instrumen untuk mendukung skenario metrik yang berbeda. Kelas instrumennya adalah:

Keamanan

.NET 6 menambahkan dukungan pratinjau untuk dua mitigasi keamanan utama: Control-flow Enforcement Technology (CET) dan "write exclusive execute" (W^X).

CET adalah teknologi Intel yang tersedia dalam beberapa prosesor Intel dan AMD yang lebih baru. Ini menambahkan kemampuan ke perangkat keras yang melindungi dari beberapa serangan pembajakan aliran kontrol. .NET 6 menyediakan dukungan untuk CET untuk aplikasi Windows x64, dan Anda harus mengaktifkannya secara eksplisit. Untuk informasi selengkapnya, lihat kompatibilitas .NET 6 dengan tumpukan bayangan Intel CET.

W^X tersedia semua sistem operasi dengan .NET 6 tetapi hanya diaktifkan secara default di Apple Silicon. W^X memblokir jalur serangan paling sederhana dengan melarang halaman memori agar dapat ditulis dan dapat dieksekusi secara bersamaan.

Pemangkasan IL

Pemangkasan penyebaran mandiri ditingkatkan. Di .NET 5, hanya rakitan yang tidak digunakan yang dipangkas. .NET 6 menambahkan pemangkasan jenis dan anggota yang tidak digunakan juga. Selain itu, memangkas peringatan, yang memperingatkan Anda ke tempat-tempat di mana pemangkasan dapat menghapus kode yang digunakan pada waktu proses, sekarang diaktifkan secara default. Untuk informasi selengkapnya, lihat Memangkas penyebaran mandiri dan executable.

Analisis kode

.NET 6 SDK mencakup beberapa penganalisis kode baru yang menyangkut kompatibilitas API, kompatibilitas platform, keamanan pemangkasan, penggunaan rentang dalam perangkaian string dan pemisahan, API string yang lebih cepat, dan API pengumpulan yang lebih cepat. Untuk daftar lengkap penganalisis baru (dan dihapus), lihat Rilis Analyzer - .NET 6.

Penjaga platform kustom

Penganalisis Is<Platform> kompatibilitas Platform mengenali metode di OperatingSystem kelas, misalnya, OperatingSystem.IsWindows(), sebagai penjaga platform. Untuk memungkinkan penjaga platform kustom, .NET 6 memperkenalkan dua atribut baru yang dapat Anda gunakan untuk membuat anotasi bidang, properti, atau metode dengan nama platform yang didukung atau tidak didukung:

Formulir Windows

Application.SetDefaultFont(Font) adalah metode baru di .NET 6 yang mengatur font default di seluruh aplikasi Anda.

Templat untuk aplikasi C# Formulir Windows telah diperbarui untuk mendukung global using direktif, namespace cakupan file, dan jenis referensi nullable. Selain itu, mereka menyertakan kode bootstrap aplikasi, yang mengurangi kode boilerplate dan memungkinkan perancang Formulir Windows untuk merender permukaan desain dalam font pilihan. Kode bootstrap adalah panggilan ke ApplicationConfiguration.Initialize(), yang merupakan metode yang dihasilkan sumber yang memancarkan panggilan ke metode konfigurasi lain, seperti Application.EnableVisualStyles(). Selain itu, jika Anda mengatur font non-default melalui properti ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize() memancarkan panggilan ke SetDefaultFont(Font).

Untuk informasi selengkapnya, lihat posting blog Apa yang baru dalam Formulir Windows.

Build sumber

Tarball sumber, yang berisi semua sumber untuk .NET SDK, sekarang menjadi produk dari build .NET SDK. Organisasi lain, seperti Red Hat, dapat membangun versi SDK mereka sendiri menggunakan tarball sumber ini.

Moniker kerangka kerja target

Moniker kerangka kerja target (TFM) khusus OS tambahan telah ditambahkan untuk .NET 6, misalnya, , net6.0-androidnet6.0-ios, dan net6.0-macos. Untuk informasi selengkapnya, lihat TFM khusus OS .NET 5+.

Matematika generik

Dalam pratinjau adalah kemampuan untuk menggunakan operator pada jenis generik di .NET 6. .NET 6 memperkenalkan banyak antarmuka yang menggunakan fitur pratinjau baru C# 10, static abstract anggota antarmuka. Antarmuka ini sesuai dengan operator yang berbeda, misalnya, IAdditionOperators mewakili + operator. Antarmuka tersedia dalam paket System.Runtime.Experimental NuGet. Untuk informasi selengkapnya, lihat posting blog Matematika generik.

Validasi paket NuGet

Jika Anda adalah pengembang pustaka NuGet, alat validasi paket baru memungkinkan Anda memvalidasi bahwa paket Anda konsisten dan terbentuk dengan baik. Anda dapat menentukan apakah:

  • Ada perubahan yang melanggar di seluruh versi paket.
  • Paket ini memiliki sekumpulan API publik yang sama untuk semua implementasi khusus runtime.
  • Ada celah untuk kerangka kerja target atau penerapan runtime.

Untuk informasi selengkapnya, lihat posting blog Validasi Paket.

API Refleksi

.NET 6 memperkenalkan API baru berikut yang memeriksa kode dan memberikan informasi nullability:

API ini berguna untuk alat dan serializer berbasis refleksi.

API Microsoft.Extensions

Beberapa namespace ekstensi memiliki peningkatan di .NET 6, seperti yang ditunjukkan tabel berikut.

Ruang nama Penyempurnaan
Microsoft.Extensions.DependencyInjection CreateAsyncScope memungkinkan Anda menggunakan using pernyataan dengan aman untuk penyedia layanan yang mendaftarkan IAsyncDisposable layanan.
Microsoft.Extensions.Hosting Metode baru ConfigureHostOptions menyederhanakan penyiapan aplikasi.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging memiliki generator sumber baru untuk API pengelogan berkinerja. Generator sumber dipicu jika Anda menambahkan yang baru LoggerMessageAttribute ke partial metode pengelogan. Pada waktu kompilasi, generator menghasilkan implementasi partial metode , yang biasanya lebih cepat pada waktu proses daripada solusi pengelogan yang ada. Untuk informasi selengkapnya, lihat Pembuatan sumber pengelogan waktu kompilasi.

API LINQ baru

Banyak metode LINQ telah ditambahkan di .NET 6. Sebagian besar metode baru yang tercantum dalam tabel berikut memiliki metode yang setara dalam jenis.System.Linq.Queryable

Metode Deskripsi
Enumerable.TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) Mencoba menentukan jumlah elemen dalam urutan tanpa memaksa enumerasi.
Enumerable.Chunk<TSource>(IEnumerable<TSource>, Int32) Membagi elemen urutan menjadi potongan-potongan ukuran yang ditentukan.
Enumerable.MaxBy dan Enumerable.MinBy Menemukan elemen maksimal atau minimal menggunakan pemilih kunci.
Enumerable.DistinctBy, Enumerable.ExceptBy, Enumerable.IntersectBy, dan Enumerable.UnionBy Variasi baru metode yang melakukan operasi berbasis set ini memungkinkan Anda menentukan kesetaraan menggunakan fungsi pemilih kunci.
Enumerable.ElementAt<TSource>(IEnumerable<TSource>, Index) dan Enumerable.ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) Menerima indeks yang dihitung dari awal atau akhir urutan—misalnya, Enumerable.Range(1, 10).ElementAt(^2) mengembalikan 9.
Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) dan Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, TSource) dan Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) dan Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Kelebihan beban baru memungkinkan Anda menentukan nilai default untuk digunakan jika urutannya kosong.
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) dan Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) Kelebihan beban baru memungkinkan Anda menentukan perbandingan.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Range Menerima argumen untuk menyederhanakan pengambilan sepotong urutan—misalnya, Anda dapat menggunakan source.Take(2..7) alih-alih source.Take(7).Skip(2).
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Menghasilkan urutan tuple dengan elemen dari tiga urutan yang ditentukan.

Peningkatan tanggal, waktu, dan zona waktu

Dua struktur berikut ditambahkan di .NET 6: System.DateOnly dan System.TimeOnly. Ini mewakili bagian tanggal dan bagian waktu dari DateTime, masing-masing. DateOnly berguna untuk ulang tahun dan hari jadi, dan TimeOnly berguna untuk alarm harian dan jam kerja mingguan.

Anda sekarang dapat menggunakan ID zona waktu Internet Assigned Numbers Authority (IANA) atau Windows pada sistem operasi apa pun yang memiliki data zona waktu yang terinstal. Metode TimeZoneInfo.FindSystemTimeZoneById(String) ini telah diperbarui untuk secara otomatis mengonversi inputnya dari zona waktu Windows ke zona waktu IANA (atau sebaliknya) jika zona waktu yang diminta tidak ditemukan pada sistem. Selain itu, metode TryConvertIanaIdToWindowsId(String, String) baru dan TryConvertWindowsIdToIanaId telah ditambahkan untuk skenario ketika Anda masih perlu mengonversi secara manual dari satu format zona waktu ke format zona waktu lainnya.

Ada beberapa peningkatan zona waktu lainnya juga. Untuk informasi selengkapnya, lihat Penyempurnaan Tanggal, Waktu, dan Zona Waktu di .NET 6.

Kelas PriorityQueue

Kelas baru PriorityQueue<TElement,TPriority> mewakili kumpulan item yang memiliki nilai dan prioritas. Item di-dequeued dalam meningkatkan urutan prioritas—yaitu, item dengan nilai prioritas terendah dihapus antreannya terlebih dahulu. Kelas ini menerapkan struktur data tumpukan min.

Lihat juga