.NET Standar
.NET Standard adalah spesifikasi API .NET yang tersedia di semua implementasi .NET. Motivasi di balik .NET Standard adalah membangun keseragaman yang lebih besar dalam ekosistem .NET. .NET 5 dan versi yang lebih baru mengadopsi pendekatan yang berbeda untuk membangun keseragaman yang menghilangkan kebutuhan akan .NET Standard dalam sebagian besar skenario. Namun, jika Anda ingin berbagi kode antara .NET Framework dan implementasi .NET lainnya, seperti .NET Core, pustaka Anda harus menargetkan .NET Standard 2.0. Tidak ada versi baru .NET Standard yang akan dirilis, tetapi .NET 5 dan semua versi yang lebih baru akan terus mendukung .NET Standard 2.1 dan yang lebih lama.
Untuk informasi tentang memilih antara .NET 5+ dan .NET Standard, lihat .NET 5+ dan .NET Standard nanti di artikel ini.
Versi Standar .NET
.NET Standard diversikan. Setiap versi baru menambahkan lebih banyak API. Ketika pustaka dibangun terhadap versi .NET Standard tertentu, pustaka dapat berjalan pada implementasi .NET apa pun yang mengimplementasikan versi .NET Standard tersebut (atau lebih tinggi).
Menargetkan versi .NET Standard yang lebih tinggi memungkinkan pustaka untuk menggunakan lebih banyak API tetapi berarti hanya dapat digunakan pada versi .NET yang lebih baru. Menargetkan versi yang lebih rendah mengurangi API yang tersedia tetapi berarti pustaka dapat berjalan di lebih banyak tempat.
Pilih versi Standar .NET
.NET Standard 1.0 memiliki 7.949 dari 37.118 API yang tersedia.
Implementasi .NET | Dukungan versi |
---|---|
.NET and .NET Core | 1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0 |
.NET Framework | 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
Mono | 4.6, 5.4, 6.4 |
Xamarin.iOS | 10.0, 10.14, 12.16 |
Xamarin Mac 3.8 | 3.0, 3.8, 5.16 |
Xamarin.Android | 7.0, 8.0, 10.0 |
Platform Windows Universal | 8.0, 8.1, 10.0, 10.0.16299, TBD |
Unity | 2018.1 |
Untuk informasi selengkapnya, lihat .NET Standard 1.0. Untuk tabel interaktif, lihat versi .NET Standard.
Versi .NET Standard mana yang akan ditargetkan
Jika Anda menargetkan .NET Standard, kami sarankan Anda menargetkan .NET Standard 2.0, kecuali Anda perlu mendukung versi yang lebih lama. Sebagian besar pustaka tujuan umum seharusnya tidak memerlukan API di luar .NET Standard 2.0, dan .NET Framework tidak mendukung .NET Standard 2.1. .NET Standard 2.0 didukung oleh semua platform modern dan merupakan cara yang direkomendasikan untuk mendukung beberapa platform dengan satu target.
Jika Anda perlu mendukung .NET Standard 1.x, kami sarankan Anda juga menargetkan .NET Standard 2.0. .NET Standard 1.x didistribusikan sebagai sekumpulan paket NuGet terperinci, yang membuat grafik dependensi paket besar dan menghasilkan banyak paket yang diunduh saat proyek dibangun. Untuk informasi selengkapnya, lihat Penargetan lintas platform dan .NET 5+ dan .NET Standard nanti di artikel ini.
Catatan
Mulai dari .NET 9, peringatan build dipancarkan jika proyek Anda menargetkan .NET Standard 1.x. Untuk informasi selengkapnya, lihat Peringatan yang dipancarkan untuk target .NET Standard 1.x.
Aturan penerapan versi .NET Standard
Ada dua aturan penerapan versi utama:
- Aditif: Versi .NET Standard adalah lingkaran konsentris logis: versi yang lebih tinggi menggabungkan semua API dari versi sebelumnya. Tidak ada perubahan yang melanggar antar versi.
- Tidak dapat diubah: Setelah dikirim, versi .NET Standard dibekukan.
Tidak akan ada versi .NET Standard baru setelah 2.1. Untuk informasi selengkapnya, lihat .NET 5+ dan .NET Standard nanti di artikel ini.
Spesifikasi
Spesifikasi .NET Standard adalah sekumpulan API standar. Spesifikasinya dikelola oleh pelaksana .NET, khususnya Microsoft (termasuk .NET Framework, .NET Core, dan Mono) dan Unity.
Artefak resmi
Spesifikasi resmi adalah sekumpulan file .cs yang menentukan API yang merupakan bagian dari standar. Direktori ref di repositori dotnet/standar (sekarang diarsipkan) mendefinisikan API Standar .NET.
Metapackage NETStandard.Library (sumber) menjelaskan kumpulan pustaka yang menentukan (sebagian) satu atau beberapa versi .NET Standard.
Komponen tertentu, seperti System.Runtime
, menjelaskan:
- Bagian dari .NET Standard (hanya cakupannya).
- Beberapa versi .NET Standard, untuk cakupan tersebut.
Artefak turunan disediakan untuk memungkinkan pembacaan yang lebih nyaman dan untuk mengaktifkan skenario pengembang tertentu (misalnya, menggunakan pengkompilasi).
- Daftar API dalam markdown.
- Assembly referensi, didistribusikan sebagai paket NuGet dan dirujuk oleh metapackage NETStandard.Library .
Representasi Paket
Kendaraan distribusi utama untuk assembly referensi .NET Standard adalah paket NuGet. Implementasi dikirimkan dengan berbagai cara, sesuai untuk setiap implementasi .NET.
Paket NuGet menargetkan satu atau beberapa kerangka kerja. Paket .NET Standard menargetkan kerangka kerja ".NET Standard". Anda dapat menargetkan kerangka kerja .NET Standard menggunakan netstandard
moniker kerangka kerja target (TFM) yang ringkas, misalnya, netstandard1.4
. Pustaka yang dimaksudkan untuk dijalankan pada beberapa implementasi .NET harus menargetkan kerangka kerja Standar .NET. Untuk set API terluas, target netstandard2.0
, karena jumlah API yang tersedia lebih dari dua kali lipat antara .NET Standard 1.6 dan 2.0.
Metapackage NETStandard.Library
mereferensikan set lengkap paket NuGet yang menentukan .NET Standard. Cara paling umum untuk menargetkan netstandard
adalah dengan merujuk metapackage ini. Ini menjelaskan dan menyediakan akses ke pustaka ~40 .NET dan API terkait yang menentukan .NET Standard. Anda dapat mereferensikan paket tambahan yang ditargetkan netstandard
untuk mendapatkan akses ke API tambahan.
Penerapan versi
Spesifikasinya tidak tunggal, tetapi sekumpulan API versi linear. Versi pertama standar menetapkan sekumpulan API dasar. Versi berikutnya menambahkan API dan mewarisi API yang ditentukan oleh versi sebelumnya. Tidak ada ketentuan yang ditetapkan untuk menghapus API dari Standar.
.NET Standard tidak spesifik untuk satu implementasi .NET, juga tidak cocok dengan skema penerapan versi salah satu implementasi tersebut.
Tidak akan ada versi .NET Standard baru setelah 2.1.
Target .NET Standard
Anda dapat membangun Pustaka Standar .NET menggunakan kombinasi netstandard
kerangka kerja dan NETStandard.Library
metapackage.
mode kompatibilitas .NET Framework
Dimulai dengan .NET Standard 2.0, mode kompatibilitas .NET Framework diperkenalkan. Mode kompatibilitas ini memungkinkan proyek .NET Standard untuk mereferensikan pustaka .NET Framework seolah-olah dikompilasi untuk .NET Standard. Mereferensikan pustaka .NET Framework tidak berfungsi untuk semua proyek, seperti pustaka yang menggunakan API Windows Presentation Foundation (WPF).
Untuk informasi selengkapnya, lihat Mode kompatibilitas .NET Framework.
Pustaka dan Visual Studio .NET Standard
Untuk membuat pustaka .NET Standard di Visual Studio, pastikan Anda memiliki Visual Studio 2022, Visual Studio 2019, atau Visual Studio 2017 versi 15.3 atau yang lebih baru yang terinstal di Windows.
Jika Anda hanya perlu menggunakan pustaka .NET Standard 2.0 di proyek Anda, Anda juga dapat melakukannya di Visual Studio 2015. Namun, Anda memerlukan klien NuGet 3.6 atau yang lebih tinggi terinstal. Anda dapat mengunduh klien NuGet untuk Visual Studio 2015 dari halaman unduhan NuGet.
.NET 5+ dan .NET Standard
.NET 5, .NET 6, .NET 7, .NET 8, dan .NET 9 adalah produk tunggal dengan serangkaian kemampuan dan API seragam yang dapat digunakan untuk aplikasi desktop Windows dan aplikasi konsol lintas platform, layanan cloud, dan situs web. TFM .NET 8, misalnya, mencerminkan berbagai skenario ini:
net8.0
TFM ini untuk kode yang berjalan di mana-mana. Dengan beberapa pengecualian, ini hanya mencakup teknologi yang berfungsi lintas platform. Untuk kode .NET 8,
net8.0
menggantikan TFMnetcoreapp
dannetstandard
.net8.0-windows
Ini adalah contoh TFM khusus OS yang menambahkan fungsionalitas khusus OS ke semua yang
net8.0
merujuk ke.
Kapan harus menargetkan net8.0
vs. netstandard
Untuk kode yang ada yang menargetkan .NET Standard 2.0 atau yang lebih baru, tidak perlu mengubah TFM ke net8.0
atau TFM yang lebih baru. .NET 8 mengimplementasikan .NET Standard 2.1 dan yang lebih lama. Satu-satunya alasan untuk menargetkan ulang dari .NET Standard ke .NET 8+ adalah untuk mendapatkan akses ke lebih banyak fitur runtime, fitur bahasa, atau API. Misalnya, untuk menggunakan C# 9, Anda perlu menargetkan .NET 5 atau versi yang lebih baru. Anda dapat melakukan multitarget .NET 8 dan .NET Standard untuk mendapatkan akses ke fitur yang lebih baru dan masih memiliki pustaka Anda yang tersedia untuk implementasi .NET lainnya.
Catatan
Jika proyek Anda menargetkan .NET Standard 1.x, kami sarankan Anda menargetkannya kembali ke .NET Standard 2.0 atau .NET 6+. Untuk informasi selengkapnya, lihat Peringatan yang dipancarkan untuk target .NET Standard 1.x.
Berikut adalah beberapa panduan untuk kode baru untuk .NET 5+:
Komponen aplikasi
Jika Anda menggunakan pustaka untuk memecah aplikasi menjadi beberapa komponen, kami sarankan Anda menargetkan
net8.0
. Untuk kesederhanaan, yang terbaik adalah menyimpan semua proyek yang membentuk aplikasi Anda pada versi .NET yang sama. Kemudian Anda dapat mengasumsikan fitur BCL yang sama di mana-mana.Pustaka yang dapat digunakan kembali
Jika Anda membangun pustaka yang dapat digunakan kembali yang anda rencanakan untuk dikirim di NuGet, pertimbangkan trade-off antara jangkauan dan set fitur yang tersedia. .NET Standard 2.0 adalah versi terbaru yang didukung oleh .NET Framework, sehingga memberikan jangkauan yang baik dengan set fitur yang cukup besar. Kami tidak menyarankan untuk menargetkan .NET Standard 1.x, karena Anda akan membatasi kumpulan fitur yang tersedia untuk peningkatan jangkauan minimal.
Jika Anda tidak perlu mendukung .NET Framework, Anda dapat menargetkan .NET Standard 2.1 atau .NET 8. Sebaiknya lewati .NET Standard 2.1 dan langsung ke .NET 8. Pustaka yang paling banyak digunakan multi-target untuk .NET Standard 2.0 dan .NET 5+. Mendukung .NET Standard 2.0 memberi Anda jangkauan terbanyak, sementara mendukung .NET 5+ memastikan Anda dapat memanfaatkan fitur platform terbaru untuk pelanggan yang sudah ada di .NET 5+.
Masalah Standar .NET
Berikut adalah beberapa masalah dengan .NET Standard yang membantu menjelaskan mengapa .NET 5 dan versi yang lebih baru adalah cara yang lebih baik untuk berbagi kode di seluruh platform dan beban kerja:
Kelambatan untuk menambahkan API baru
.NET Standard dibuat sebagai set API yang harus didukung oleh semua implementasi .NET, sehingga ada proses peninjauan untuk proposal untuk menambahkan API baru. Tujuannya adalah untuk menstandarkan hanya API yang dapat diimplementasikan di semua platform .NET saat ini dan yang akan datang. Hasilnya adalah bahwa jika fitur melewatkan rilis tertentu, Anda mungkin harus menunggu selama beberapa tahun sebelum ditambahkan ke versi Standar. Kemudian Anda akan menunggu lebih lama lagi agar versi baru .NET Standard didukung secara luas.
Solusi di .NET 5+: Saat fitur diimplementasikan, fitur tersebut sudah tersedia untuk setiap aplikasi dan pustaka .NET 5+ karena basis kode dibagikan. Dan karena tidak ada perbedaan antara spesifikasi API dan implementasinya, Anda dapat memanfaatkan fitur baru jauh lebih cepat daripada dengan .NET Standard.
Penerapan versi kompleks
Pemisahan spesifikasi API dari implementasinya menghasilkan pemetaan kompleks antara versi spesifikasi API dan versi implementasi. Kompleksitas ini terbukti dalam tabel yang ditunjukkan sebelumnya dalam artikel ini dan instruksi tentang cara menafsirkannya.
Solusi di .NET 5+: Tidak ada pemisahan antara spesifikasi .NET 5+ API dan implementasinya. Hasilnya adalah skema TFM yang disederhanakan. Ada satu awalan TFM untuk semua beban kerja:
net8.0
digunakan untuk pustaka, aplikasi konsol, dan aplikasi web. Satu-satunya variasi adalah akhiran yang menentukan API khusus platform untuk platform tertentu, sepertinet8.0-windows
. Berkat konvensi penamaan TFM ini, Anda dapat dengan mudah mengetahui apakah aplikasi tertentu dapat menggunakan pustaka tertentu. Tidak ada tabel ekuivalen nomor versi, seperti tabel untuk .NET Standard, yang diperlukan.Pengecualian yang tidak didukung platform pada durasi
.NET Standard memaparkan API khusus platform. Kode Anda mungkin dikompilasi tanpa kesalahan dan tampaknya portabel ke platform apa pun meskipun tidak portabel. Saat berjalan pada platform yang tidak memiliki implementasi untuk API tertentu, Anda mendapatkan kesalahan run-time.
Solusi di .NET 5+: .NET 5+ SDK menyertakan penganalisis kode yang diaktifkan secara default. Penganalisis kompatibilitas platform mendeteksi penggunaan API yang tidak disengaja yang tidak didukung pada platform yang ingin Anda jalankan. Untuk informasi selengkapnya, lihat Penganalisis kompatibilitas platform.
.NET Standard tidak digunakan lagi
.NET Standard masih diperlukan untuk pustaka yang dapat digunakan oleh beberapa implementasi .NET. Kami sarankan Anda menargetkan .NET Standard dalam skenario berikut:
- Gunakan
netstandard2.0
untuk berbagi kode antara .NET Framework dan semua implementasi .NET lainnya. - Gunakan
netstandard2.1
untuk berbagi kode antara Mono, Xamarin, dan .NET Core 3.x.