Bagikan melalui


Apa yang baru di .NET 7

.NET 7 adalah penerus .NET 6 dan berfokus pada 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.

Untuk menemukan semua artikel .NET yang telah diperbarui untuk .NET 7, lihat dokumen .NET: Apa yang baru untuk rilis .NET 7.

Performa

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 pertengahan 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.
  • AOT asli menghasilkan executable mandiri dalam format file platform target tanpa dependensi eksternal. Ini sepenuhnya asli, tanpa IL atau JIT, dan menyediakan waktu startup yang cepat dan penyebaran 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:

  • Penyesuaian kontrak memberi Anda lebih banyak kontrol atas bagaimana jenis diserialisasikan dan dideserialisasi. Untuk informasi selengkapnya, lihat Mengkustomisasi kontrak JSON.
  • Serialisasi polimorfik untuk hierarki jenis yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Membuat serialisasi properti kelas turunan.
  • Dukungan untuk anggota yang diperlukan, yang merupakan properti yang harus ada dalam payload JSON agar deserialisasi berhasil. Untuk informasi selengkapnya, lihat 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 generis—yaitu, tanpa harus mengetahui jenis yang tepat yang anda kerjakan. Misalnya, jika Anda ingin menulis metode yang menambahkan dua angka, sebelumnya Anda harus menambahkan kelebihan metode 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.

Regex

. Pustaka ekspresi reguler NET telah melihat peningkatan fungsional dan performa yang signifikan di .NET 7:

  • Opsi RegexOptions.NonBacktracking baru memungkinkan pencocokan menggunakan pendekatan yang menghindari backtracking dan menjamin pemrosesan linear-time dalam 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 membangun mesin yang dioptimalkan untuk pola Anda pada waktu kompilasi, memberikan manfaat performa throughput. Sumber yang dipancarkan adalah bagian dari proyek Anda, sehingga Anda dapat melihat dan men-debugnya. Selain itu, diagnostik SYSLIB1045 generator sumber baru memberi tahu Anda ke tempat yang Anda gunakan Regex yang dapat dikonversi ke generator sumber. Untuk informasi selengkapnya, lihat Generator sumber ekspresi reguler .NET.

  • Untuk pencarian yang tidak peka huruf besar/kecil, .NET 7 menyertakan perolehan performa besar. Keuntungan datang karena menentukan RegexOptions.IgnoreCase tidak lagi panggilan ToLower pada setiap karakter dalam pola dan pada setiap karakter dalam input. Sebaliknya, semua pekerjaan terkait casing dilakukan ketika Regex dibangun.

  • 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 dalam posting blog .NET 7 .

Pustaka .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 TimeSpanjenis , , TimeOnlyDateTime, dan DateTimeOffset - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Kelebihan konstruktor baru DateTime

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Kelebihan konstruktor baru DateTimeOffset

- 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 Pratinjau .NET 7 4 dan .NET 7 Pratinjau 6 .
API pembatasan tarif 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 Batas laju handler HTTP di .NET dan Mengumumkan pembatasan tarif untuk .NET.
API untuk membaca semua data dari Stream - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read dapat mengembalikan lebih sedikit data daripada yang tersedia di aliran. Metode baru ReadExactly membaca dengan tepat jumlah byte yang diminta, dan metode baru ReadAtLeast membaca setidaknya jumlah byte yang diminta. Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 5 .
Pengonversi jenis baru untuk DateOnly, , TimeOnlyInt128, UInt128, danHalf System.ComponentModel Di namespace layanan:

- 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 - System.IO.UnixFileMode Enum
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 7 .
Atribut untuk menunjukkan jenis sintaks apa yang diharapkan dalam string StringSyntaxAttribute Misalnya, Anda dapat menentukan bahwa string parameter 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 Menggunakan .NET dari aplikasi JavaScript apa pun di .NET 7.

Observabilitas

.NET 7 melakukan penyempurnaan pada pengamatan. Pengamatan membantu Anda memahami status aplikasi saat diskalakan dan saat kompleksitas teknis meningkat. . Implementasi pengamatan NET terutama dibangun di sekitar OpenTelemetry. Peningkatan 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.

Templat

Beberapa penyempurnaan selamat datang telah dilakukan pada dotnet new perintah dan penulisan templat.

dotnet new

dotnet new Perintah CLI, 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 installlebih baik, sub-perintah , uninstall, searchlist, , dan update tidak lagi memiliki awalan--.

Penulisan

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, web templat memungkinkan beberapa bentuk autentikasi.

Untuk informasi selengkapnya, lihat posting blog .NET 7 Pratinjau 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 penerbitan dotnet.

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 ManagePackageVersionsCentrally MSBuild ke true dan tambahkan versi untuk dependensi paket umum menggunakan PackageVersion item. Kemudian, dalam file proyek individual, Anda dapat menghilangkan Version atribut dari item PackageReference apa pun yang merujuk ke 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#. Generator sumber mencari LibraryImportAttribute pada static, partial metode untuk memicu pembuatan sumber waktu kompilasi dari kode marshalling. Dengan menghasilkan kode marshalling pada waktu kompilasi, tidak ada stub IL yang perlu dihasilkan pada run time, seperti saat menggunakan DllImportAttribute. Generator sumber meningkatkan performa aplikasi dan juga memungkinkan aplikasi untuk dikompilasi sebelumnya (AOT). Untuk informasi selengkapnya, lihat Pembuatan sumber untuk pemanggilan platform dan Menggunakan marshaller kustom dalam P/Invokes yang dihasilkan 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 di 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.

Inti ASP.NET

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.

Formulir Windows

Banyak pekerjaan telah masuk ke Formulir Windows 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 posting blog Apa yang baru untuk WPF di .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 Peningkatan .NET sekarang mendukung peningkatan aplikasi WCF sisi server ke CoreWCF, yang merupakan port WCF yang dibuat komunitas ke .NET (Core). Untuk informasi selengkapnya, lihat Meningkatkan proyek sisi server WCF untuk 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 Postingan blog Apa yang baru dengan AutoML dan alat dan Memperkenalkan ML.NET Text Classification API .

Lihat juga