Apa yang baru di .NET 7
.NET 7 adalah penerus .NET 6 dan berfokus pada menjadi terpadu, modern, sederhana, dan cepat . .NET 7 akan
Artikel ini mencantumkan fitur baru .NET 7 dan menyediakan tautan ke informasi yang lebih rinci tentang masing-masing fitur.
Kinerja
Performa adalah fokus utama .NET 7, dan semua fiturnya dirancang dengan mengingat performa. Selain itu, .NET 7 mencakup peningkatan berikut yang bertujuan murni pada performa:
- Penggantian on-stack (OSR) adalah pelengkap kompilasi berjenjang. Ini memungkinkan runtime untuk mengubah kode yang dijalankan oleh metode yang sedang berjalan di tengah eksekusinya (yaitu, sementara itu "di tumpukan"). Metode jangka panjang dapat beralih ke versi yang lebih dioptimalkan di tengah-tengah eksekusi.
- Pengoptimalan yang dipandu profil (PGO) sekarang berfungsi dengan OSR dan lebih mudah diaktifkan (dengan menambahkan
<TieredPGO>true</TieredPGO>
ke file proyek Anda). PGO juga dapat melengkapi dan mengoptimalkan hal-hal tambahan, seperti delegasi. - Pembuatan kode yang disempurnakan untuk Arm64.
- Native AOT menghasilkan executable mandiri dalam format file yang sesuai dengan platform target tanpa ketergantungan eksternal. Ini sepenuhnya asli, tanpa IL atau JIT, dan menyediakan waktu mulai yang cepat dan distribusi kecil yang mandiri. Di .NET 7, Native AOT berfokus pada aplikasi konsol dan mengharuskan aplikasi dipangkas.
- Peningkatan performa pada runtime Mono, yang mendukung aplikasi Blazor WebAssembly, Android, dan iOS.
Untuk melihat secara rinci banyak fitur berfokus pada performa yang membuat .NET 7 begitu cepat, lihat peningkatan performa di posting blog .NET 7.
Serialisasi System.Text.Json
.NET 7 mencakup peningkatan pada serialisasi System.Text.Json di area berikut:
- Kustomisasi Kontrak memberi Anda lebih banyak kontrol atas cara jenis diserialisasikan dan dideserialisasi. Untuk informasi selengkapnya, lihat Menyesuaikan kontrak JSON.
- serialisasi Polimorfik untuk hierarki jenis yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Serialisasi properti kelas turunan.
- Dukungan untuk diperlukan oleh anggota, yang merupakan properti yang harus ada dalam payload JSON agar deserialisasi berhasil. Untuk informasi selengkapnya, lihat properti-properti yang Diperlukan .
Untuk informasi tentang ini dan pembaruan lainnya, lihat posting blog Apa yang baru di System.Text.Json di .NET 7.
Matematika generik
.NET 7 dan C# 11 mencakup inovasi yang memungkinkan Anda melakukan operasi matematika secara generik—yaitu, tanpa harus mengetahui jenis tepat yang Anda kerjakan. Misalnya, jika Anda ingin menulis metode yang menambahkan dua angka, sebelumnya Anda harus memperbanyak metode tersebut untuk setiap jenis. Sekarang Anda dapat menulis metode umum tunggal, di mana parameter jenis dibatasi menjadi jenis seperti angka. Untuk informasi selengkapnya, lihat artikel matematika generik
Ekspresi reguler
Pustaka ekspresi reguler dari .NET telah mengalami peningkatan fungsional dan performa yang signifikan di .NET 7.
Opsi baru RegexOptions.NonBacktracking memungkinkan pencocokan menggunakan pendekatan yang menghindari backtracking dan menjamin pemrosesan waktu linear berdasarkan panjang input. Mesin nonbacktracking tidak dapat digunakan dalam pencarian kanan-ke-kiri dan memiliki beberapa batasan lain, tetapi cepat untuk semua ekspresi dan input reguler. Untuk informasi selengkapnya, lihat mode Nonbacktracking .
Generator sumber ekspresi reguler baru. Generator sumber daya membangun mesin yang dioptimalkan untuk pola Anda pada waktu kompilasi, memberikan manfaat kinerja throughput. Sumber yang dipancarkan adalah bagian dari proyek Anda, sehingga Anda dapat melihat dan men-debugnya. Selain itu, diagnostik pembangkit sumber baru
SYSLIB1045
memberi tahu Anda tentang tempat di mana Anda menggunakan Regex yang dapat dikonversi ke pembangkit sumber. Untuk informasi selengkapnya, lihat generator sumber ekspresi reguler .NET.Untuk pencarian yang tidak peka huruf besar/kecil, .NET 7 menyertakan peningkatan performa yang signifikan. Keuntungan datang karena menentukan RegexOptions.IgnoreCase tidak lagi memanggil ToLower pada setiap karakter baik dalam pola maupun dalam input. Sebaliknya, semua pekerjaan pengolahan terkait casing dilakukan ketika Regex dibuat.
Regex sekarang mendukung rentang untuk beberapa API. Metode baru berikut telah ditambahkan sebagai bagian dari dukungan ini:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (dan beberapa kelebihan beban lainnya)
Untuk informasi selengkapnya tentang ini dan peningkatan lainnya, lihat Peningkatan Ekspresi Reguler di posting blog .NET 7.
Perpustakaan .NET
Banyak peningkatan telah dilakukan pada API pustaka .NET. Beberapa disebutkan di bagian lain yang didedikasikan dari artikel ini. Beberapa yang lain dirangkum dalam tabel berikut.
Deskripsi | API | Informasi lebih lanjut |
---|---|---|
Dukungan untuk mikrodetik dan nanodetik dalam jenis TimeSpan, TimeOnly, DateTime, dan DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Kelebihan konstruktor DateTime baru - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Kelebihan konstruktor DateTimeOffset baru - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) - Dan yang lainnya... |
API ini berarti Anda tidak lagi harus melakukan komputasi pada nilai "tick" untuk menentukan nilai mikrodetik dan nanodetik. Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 4. |
API untuk membaca, menulis, mengarsipkan, dan mengekstrak arsip Tar | System.Formats.Tar | Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 4 dan .NET 7 Pratinjau 6. |
Pembatasan laju API untuk melindungi sumber daya dengan menjaga lalu lintas pada tingkat yang aman | RateLimiter dan lainnya dalam paket System.Threading.RateLimiting NuGet | Untuk informasi selengkapnya, lihat Pembatasan laju handler HTTP di .NET dan Mengumumkan pembatasan laju untuk .NET. |
API untuk membaca semua data dari Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read dapat mengembalikan data yang lebih sedikit daripada yang tersedia dalam aliran. Metode ReadExactly baru membaca persis jumlah byte yang diminta, dan metode ReadAtLeast baru membaca setidaknya jumlah byte yang diminta. Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 5. |
Pengonversi jenis baru untuk DateOnly , TimeOnly , Int128 , UInt128 , dan Half |
Di namespace System.ComponentModel: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Pengonversi jenis sering digunakan untuk mengonversi jenis nilai ke dan dari string. API baru ini menambahkan pengonversi jenis untuk jenis yang ditambahkan baru-baru ini. |
Dukungan metrik untuk IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() memungkinkan Anda menggunakan penghitung peristiwa atau API metrik untuk melacak statistik untuk satu atau beberapa cache memori. Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 4. |
API untuk mendapatkan dan mengatur izin file Unix | enum - System.IO.UnixFileMode - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Untuk informasi selengkapnya, lihat posting blog .NET 7 Preview 7. |
Atribut untuk menunjukkan jenis sintaks apa yang diharapkan dalam string | StringSyntaxAttribute | Misalnya, Anda dapat menentukan bahwa parameter string mengharapkan ekspresi reguler dengan mengambil parameter dengan [StringSyntax(StringSyntaxAttribute.Regex)] . |
API untuk menginteropsi JavaScript saat berjalan di browser atau arsitektur WebAssembly lainnya | System.Runtime.InteropServices.JavaScript | Aplikasi JavaScript dapat menggunakan dukungan WebAssembly yang diperluas di .NET 7 untuk menggunakan kembali pustaka .NET dari JavaScript. Untuk informasi selengkapnya, lihat Gunakan .NET dari aplikasi JavaScript apa pun di .NET 7. |
Kemampuan Pemantauan
.NET 7 membuat peningkatan pada pengamatan. Keterlihatan membantu Anda memahami keadaan aplikasi Anda saat berkembang dan saat kompleksitas teknis meningkat. .NET diimplementasikan untuk observabilitas yang terutama dibangun di sekitar OpenTelemetry. Penyempurnaan meliputi:
- Peristiwa Activity.CurrentChanged baru, yang dapat Anda gunakan untuk mendeteksi kapan konteks rentang utas terkelola berubah.
- Metode enumerator berkinerja baru untuk properti Activity: EnumerateTagObjects(), EnumerateLinks(), dan EnumerateEvents().
Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 4.
.NET SDK
.NET 7 SDK meningkatkan pengalaman templat CLI. Ini juga memungkinkan penerbitan ke kontainer, dan manajemen paket pusat dengan NuGet.
Template
Beberapa penyempurnaan selamat datang telah dilakukan pada perintah dotnet new
dan penulisan templat.
dotnet new
Perintah CLI dotnet new
, yang membuat proyek, file konfigurasi, atau solusi baru berdasarkan templat, sekarang mendukung penyelesaian tab untuk menjelajahi:
- Nama templat yang tersedia
- Opsi templat
- Nilai opsi yang diizinkan
Selain itu, untuk kesesuaian yang lebih baik, sub-perintah install
, uninstall
, search
, list
, dan update
tidak lagi memiliki awalan --
.
Penyusunan
Batasan templat, konsep baru untuk .NET 7, memungkinkan Anda menentukan konteks di mana templat Anda diizinkan. Batasan membantu mesin templat menentukan templat mana yang harus ditampilkan dalam perintah seperti dotnet new list
. Anda dapat membatasi templat Anda ke sistem operasi, host mesin templat (misalnya, dialog .NET CLI atau Proyek Baru di Visual Studio), dan beban kerja yang diinstal. Anda menentukan batasan dalam file konfigurasi templat Anda.
Juga dalam file konfigurasi templat, Anda sekarang dapat membuat anotasi parameter templat sebagai memungkinkan beberapa nilai. Misalnya, templat web
memungkinkan beberapa bentuk autentikasi.
Untuk informasi selengkapnya, lihat posting blog .NET 7 Preview 6.
Menerbitkan ke kontainer
Kontainer adalah salah satu cara term mudah untuk mendistribusikan dan menjalankan berbagai aplikasi dan layanan di cloud. Gambar kontainer sekarang merupakan jenis output yang didukung dari .NET SDK, dan Anda dapat membuat versi kontainer aplikasi Anda menggunakan dotnet publish
. Untuk informasi selengkapnya tentang fitur ini, lihat Mengumumkan dukungan kontainer bawaan untuk .NET SDK. Untuk tutorial, lihat Membuat kontainer aplikasi .NET dengan dotnet publish.
Manajemen paket pusat
Anda sekarang dapat mengelola dependensi umum dalam proyek Anda dari satu lokasi menggunakan fitur manajemen paket pusat (CPM) NuGet. Untuk mengaktifkannya, Anda menambahkan file ManagePackageVersionsCentrally
ke true
dan tambahkan versi untuk dependensi paket umum menggunakan item PackageVersion
. Kemudian, dalam file proyek individual, Anda dapat menghilangkan atribut Version
dari PackageReference item yang mengacu pada paket yang dikelola secara terpusat.
Untuk informasi selengkapnya, lihat Manajemen Paket Pusat.
P/Panggil pembuatan sumber
.NET 7 memperkenalkan generator sumber untuk pemanggilan platform (P/Invokes) di C#. Pembangkit sumber mencari LibraryImportAttribute pada metode static
, partial
untuk memicu pembuatan sumber pada waktu kompilasi kode marshalling. Dengan menghasilkan kode marshalling pada waktu kompilasi, tidak ada stub IL yang perlu dihasilkan pada run time, sebagaimana biasanya dilakukan ketika menggunakan DllImportAttribute. Generator sumber meningkatkan performa aplikasi dan juga memungkinkan aplikasi untuk dikompilasi sebelumnya (AOT). Untuk informasi selengkapnya, lihat Generasi sumber untuk pemanggilan platform dan menggunakan marshaller kustom dalam P/Invoke yang dihasilkan dari sumber.
Rilis terkait
Bagian ini berisi informasi tentang produk terkait yang memiliki rilis yang bertepatan dengan rilis .NET 7.
Visual Studio 2022 versi 17.4
Untuk informasi selengkapnya, lihat Apa yang baru di Visual Studio 2022.
C# 11
C# 11 mencakup dukungan untuk matematika generik, literal string mentah, jenis cakupan file, dan fitur baru lainnya. Untuk informasi selengkapnya, lihat Apa yang baru dalam C# 11.
F# 7
F# 7 melanjutkan perjalanan untuk membuat bahasa lebih sederhana dan meningkatkan performa dan interop dengan fitur C# baru. Untuk informasi selengkapnya, lihat Mengumumkan F# 7.
.NET MAUI
.NET Multi-platform App UI (.NET MAUI) adalah kerangka kerja lintas platform untuk membuat aplikasi seluler dan desktop asli dengan C# dan XAML. Ini menyaingkan Api Android, iOS, macOS, dan Windows menjadi satu API. Untuk informasi tentang pembaruan terbaru, lihat Apa yang baru dalam .NET MAUI untuk .NET 7.
ASP.NET Core
ASP.NET Core 7.0 mencakup middleware pembatasan laju, peningkatan API minimal, dan transcoding JSON gRPC. Untuk informasi tentang semua pembaruan, lihat Apa yang baru di ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 mencakup dukungan agnostik penyedia untuk kolom JSON, peningkatan performa untuk menyimpan perubahan, dan templat rekayasa terbalik kustom. Untuk informasi tentang semua pembaruan, lihat Apa yang baru di EF Core 7.0.
Windows Forms
Banyak pekerjaan yang telah dilakukan pada Windows Forms untuk .NET 7. Penyempurnaan telah dilakukan di area berikut:
- Aksesibilitas
- DPI dan penskalakan tinggi
- Pengikatan data
Untuk informasi selengkapnya, lihat Apa yang baru dalam Formulir Windows di .NET 7.
WPF
WPF di .NET 7 mencakup banyak perbaikan bug serta peningkatan performa dan aksesibilitas. Untuk informasi selengkapnya, lihat Apa yang baru untuk WPF di posting blog .NET 7.
Orleans
Orleans adalah kerangka kerja lintas platform untuk membangun aplikasi terdistribusi yang kuat dan dapat diskalakan. Untuk informasi tentang pembaruan terbaru untuk Orleans, lihat Migrasi dari Orleans 3.x ke 7.0.
Asisten Peningkatan .NET dan CoreWCF
Asisten Pemutakhiran .NET sekarang mendukung peningkatan aplikasi WCF sisi server ke CoreWCF, yang merupakan port WCF oleh komunitas ke .NET (Core). Untuk informasi selengkapnya, lihat Memperbarui proyek WCF sisi server agar menggunakan CoreWCF.
ML.NET
ML.NET sekarang menyertakan API klasifikasi teks yang memudahkan untuk melatih model klasifikasi teks kustom menggunakan teknik pembelajaran mendalam canggih terbaru. Untuk informasi selengkapnya, lihat posting blog Apa yang baru dengan AutoML dan alat dan Memperkenalkan ML.NET Text Classification API.