.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, .NET 6, dan semua versi mendatang 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 |
| .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 |
| Mono | 4.6, 5.4, 6.4 |
| Xamarin.iOS | 10.0, 10.14, 12.16 |
| Xamarin.Mac | 3.0, 3.8, 5.16 |
| Xamarin.Android | 7.0, 8.0, 10.0 |
| Universal Windows Platform | 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
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. .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 pengembang mengunduh banyak paket saat membangun. Untuk informasi selengkapnya, lihat Penargetan lintas platform dan .NET 5+ dan .NET Standard nanti di artikel ini.
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 netstandardTFM ringkas (misalnya, netstandard1.4). Pustaka yang dimaksudkan untuk berjalan pada beberapa implementasi .NET harus menargetkan kerangka kerja ini. Untuk kumpulan API terluas, targetkan 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.
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 membangun 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 diinstal pada Windows, atau Visual Studio untuk Mac versi 7.1 atau yang lebih baru diinstal di macOS.
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 dan .NET 6 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 5, misalnya, mencerminkan berbagai skenario ini:
net5.0TFM ini untuk kode yang berjalan di mana-mana. Dengan beberapa pengecualian, ini hanya mencakup teknologi yang berfungsi lintas platform. Untuk kode .NET 5,
net5.0menggantikan TFMnetcoreappdannetstandard.net5.0-windowsIni adalah contoh TFM khusus OS yang menambahkan fungsionalitas khusus OS ke semua yang
net5.0merujuk ke.
Kapan harus menargetkan net5.0 atau net6.0 vs. netstandard
Untuk kode yang ada yang menargetkan netstandard, tidak perlu mengubah TFM menjadi net5.0 atau net6.0. .NET 5 dan .NET 6 menerapkan .NET Standard 2.1 dan yang lebih lama. Satu-satunya alasan untuk menargetkan ulang dari .NET Standard ke .NET 5+ adalah untuk mendapatkan akses ke lebih banyak fitur runtime bahasa umum, fitur bahasa, atau API. Misalnya, untuk menggunakan C# 9, Anda perlu menargetkan .NET 5 atau versi yang lebih baru. Anda dapat melakukan multitarget .NET 5 atau .NET 6 dan .NET Standard untuk mendapatkan akses ke fitur yang lebih baru dan masih memiliki pustaka Anda yang tersedia untuk implementasi .NET lainnya.
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
net5.0ataunet6.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 menggunakan .NET Standard 2.1 atau .NET 5/6. Kami sarankan Anda melewati .NET Standard 2.1 dan langsung masuk ke .NET 6. Pustaka yang paling banyak digunakan akan 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:
net5.0ataunet6.0digunakan untuk pustaka, aplikasi konsol, dan aplikasi web. Satu-satunya variasi adalah akhiran yang menentukan API khusus platform untuk platform tertentu, sepertinet5.0-windowsataunet6.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.0untuk berbagi kode antara .NET Framework dan semua implementasi .NET lainnya. - Gunakan
netstandard2.1untuk berbagi kode antara Mono, Xamarin, dan .NET Core 3.x.