Saya telah membaca tentang perbedaan antara .NET Standard dan .NET Core, tetapi saya benar-benar tidak tahu apa bedanya, atau kapan harus memilih proyek perpustakaan .NET Standard dan kapan harus memilih proyek perpustakaan .NET Core.
Saya telah membaca bahwa .NET Standard adalah untuk memastikan bahwa satu set API selalu tersedia, apa pun platform yang digunakan (selama platform tersebut kompatibel dengan versi .NET Standard yang saya pilih). Jika saya tidak salah, ini berarti bahwa saya dapat membuat perpustakaan kelas .NET Standard dan kemudian menggunakannya pada platform apa pun yang kompatibel dengan versi .NET Standard yang saya pilih.
Dengan .NET Core, saya telah membaca bahwa ini dimaksudkan untuk penggunaan lintas platform juga, jadi jika saya memilih perpustakaan .NET Core sepertinya saya dapat menggunakannya pada banyak platform juga, seperti halnya .NET Standard.
Jadi pada akhirnya, saya tidak melihat perbedaannya. Kapan saya harus menggunakan yang mana? Apa perbedaan di antara mereka?
sumber
Jawaban:
Saya akan mencoba untuk lebih memperjelas keraguan Anda dan memperluas jawaban Jon Skeet.
.NET Standard adalah spesifikasi , sehingga pustaka yang dikompilasi untuk versi .NET Standard tertentu dapat digunakan dalam implementasi .NET Standard yang berbeda.
Seperti yang dikatakan dalam komentar saya yang lain, analogi yang baik untuk hubungan antara .NET Standard dan .NET Standard Implementations lainnya (.NET Core, .NET Framework, dll.) Adalah inti dari David Fowler : Versi .NET Standard adalah
Interfaces
, sedangkan framework adalah implementasi dari antarmuka tersebut.Diagram yang disederhanakan ini dapat membantu memahami hubungan ini:
Penargetan apa pun
NetCore10
memiliki akses keINetStandard15
API dan APINetCore10
tertentu (sepertiDotNetHostPolicy
).Tentu saja perpustakaan ini tidak dapat digunakan dalam
INetStandard15
implementasi yang berbeda (NetCore10
tidak dapat dikonversi keNetFramework462
atauMono46
).Jika Anda, sebagai gantinya, kebutuhan akses hanya untuk
INetStandard15
API (dan target itu spesifikasi bukannya kerangka beton) perpustakaan dapat digunakan oleh setiap kerangka yang menerapkan itu (NetCore10
,NetFramework462
, dll)Catatan: dalam analogi asli David Fowler menggunakan antarmuka untuk versi .NET standar dan implementasi kerangka kerja. Saya percaya bahwa menggunakan antarmuka dan kelas, sebaliknya, lebih intuitif dan lebih baik mewakili hubungan antara spesifikasi dan implementasi konkret.
sumber
.NET Core adalah implementasi dari .NET Standard. Ini tersedia pada banyak sistem operasi, tetapi itu bukan hal yang sama - ada implementasi lain dari .NET Standard juga.
Jadi jika Anda membuat perpustakaan .NET Core, itu akan memiliki akses ke hal-hal yang diimplementasikan di .NET Core, tetapi bukan bagian dari .NET Standard, dan perpustakaan Anda tidak akan kompatibel dengan implementasi lain dari .NET Standard, seperti Xamarin, Tizen, kerangka desktop .NET penuh dll.
Singkatnya: untuk mencapai portabilitas maksimum, buat target perpustakaan Anda .NET Standard.
sumber
INetStandard16
). .NET Core 1.0 dan Mono 4.6 keduanya mengimplementasikanINetStandard16
. Anda tidak dapat mengonversi .Net Core 1.0 ke Mono 4.6 (dan sebaliknya), tetapi apa pun yang menggunakanINetStandard16
akan bekerja pada keduanya. (kredit untuk David Fowler )Pustaka .NET Core Class pada dasarnya adalah bagian dari pustaka .NET Framework, yang hanya mengandung lebih sedikit API. Menempel ke perpustakaan .NET Core Class membuatnya sulit untuk berbagi kode antara runtimes. Kode ini mungkin tidak berfungsi untuk runtime yang berbeda (Mono untuk Xamarin), karena tidak memiliki API yang Anda butuhkan. Untuk mengatasinya ada .NET Standard, yang hanya kumpulan spesifikasi yang memberi tahu Anda API mana yang dapat Anda gunakan . Tujuan utama .NET Standard adalah untuk membagikan kode antar runtime. Dan penting bahwa spesifikasi ini diterapkan oleh semua runtime. (.NET Framework, .NET Core dan Mono untuk Xamarin).
Jadi jika Anda yakin bahwa Anda akan menggunakan pustaka Anda hanya untuk proyek .NET Core, Anda dapat mengabaikan .NET Standard, tetapi jika bahkan ada kemungkinan kecil bahwa kode Anda akan digunakan oleh .NET Framework atau Mono untuk Xamarin maka lebih baik untuk tetap berpegang pada .NET Standard
Juga perhatikan bahwa versi yang lebih tinggi .NET Standard mengandung lebih banyak API, tetapi versi yang lebih rendah didukung oleh lebih banyak platform. Karenanya, jika Anda membuat pustaka .NET Standard yang ingin Anda bagikan di antara runtimes, maka targetkan versi terendah yang Anda bisa , yang membantu Anda mencapai sebagian besar platform. Misalnya, jika Anda ingin menjalankan pada .NET Framework 4.5 dan .NET Core 1.0, versi .NET Standard tertinggi yang dapat Anda gunakan adalah .NET Standard 1.1. Lihat tabel hebat ini dari dokumentasi untuk informasi lebih lanjut tentangnya.
PS: Juga jika Anda ingin mengonversi perpustakaan Anda ke .NET Standard, .NET Portability Analyzer dapat membantu Anda dengan itu.
sumber
.NET Standard adalah spesifikasi .NET API yang dimaksudkan tersedia pada implementasi .NET. Ini memungkinkan untuk mendefinisikan kumpulan BCL API yang seragam untuk semua implementasi .NET.
.NET Core adalah salah satu implementasi dari .NET Standard. .NET Framework adalah implementasi lain dari .NET Standard.
Gambar dari .NET Blog
Jawaban Federicos memberi Anda gambaran grafis tentang bagaimana setiap kerangka kerja berevolusi dengan versi. Lihatlah diagram di bawah ini dari Microsoft Docs .
sumber
Di atas, bersama dengan penjelasan yang sangat jelas tentang sebagian besar hal yang dibahas dalam pertanyaan ini dapat ditemukan di artikel yang sangat membantu berikut oleh Microsoft (MSDN - September 2017): .NET Standard - Demystifying .NET Core dan .NET Standard
sumber
Apakah maksud Anda .NET Framework? Karena standar .NET adalah implementasi, seperti .NET Framework, .NET Core dan Xamarin.
Saya suka .NET Core karena kami dapat meng-host-nya di Linux (gunakan nginx dalam pengalaman saya). Ini berbeda dari .NET framework yang mana Anda hanya dapat meng-host di IIS. Anda dapat mempertimbangkan tentang anggaran hosting dalam hal ini (Karena windows server mahal bagi saya).
Dalam perspektif lingkungan pengembangan , inti .Net adalah ringan. Jadi, Anda dapat menggunakan VSCode, Sublime, untuk IDE (tidak hanya visual studio).
sumber
Secara sederhana, standar .NET digunakan untuk menulis proyek perpustakaan kelas yang mengkompilasi ke dll. .NET Core dapat digunakan untuk mengembangkan aplikasi web aktual yang dapat berjalan di semua sistem operasi (Windows, Linux, MacOS). (Dalam. NET Core 3 Microsoft telah menyediakan fungsionalitas untuk mengembangkan aplikasi desktop menggunakan WPF, tetapi selama ini aplikasi ini tidak akan lintas platform dan hanya akan berjalan di sistem windows. Di masa depan Microsoft mungkin akan membuatnya juga lintas platform). Standar NET pustaka / dll dapat digunakan dalam aplikasi apa pun yang menggunakan .NET (.NET framework, .NET Core) yang berarti bahwa Anda dapat menggunakan standar .NET dengan kedua .NET framework dan .NET core.
sumber