Bagikan melalui


Apa yang baru di .NET 7

.NET 7 adalah penerus .NET 6 dan berfokus pada menjadi terpadu, modern, sederhana, dan cepat . .NET 7 akan didukung selama 18 bulan sebagai rilis dukungan jangka standar (STS) (sebelumnya dikenal sebagai rilis saat ini ).

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 dan posting blog 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:

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:

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 Directory.Packages.props ke akar repositori Anda. Dalam file ini, atur properti MSBuild 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.

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.

Lihat juga