Apa itu ".NET Core"?

323

Baru-baru ini di Blog .NET Framework resmi diumumkan bahwa .NET Core akan menjadi open source .

Ironisnya, penulis menyebutkan bahwa apa NET Core akan dijelaskan dalam posting berikutnya. Beberapa perincian lainnya disebutkan dalam pos pengumuman lain .

Dari diagram yang disediakan:

.NET Core diagram

dan artikel teks itu sendiri, saya akan berasumsi bahwa .NET Core (di samping hal-hal yang jelas seperti open-source) adalah implementasi ulang modular dari .NET penuh. Yaitu komponen kerangka dimuat sebagaimana diperlukan, seperti paket NuGet dimuat sekarang. Dan sekarang ASP.NET 5 adalah salah satu modul yang sudah diimplementasikan. Apakah pemahaman saya tentang .NET Core benar? Mungkin saya melewatkan sesuatu?


Saya telah menemukan artikel baru yang saya temukan pendek dan sangat bagus. Ini mencakup .NET Standard, .NET Core, dan .NET Framework dan hubungan mereka. Saya sangat merekomendasikannya.

Petr Abdulin
sumber
5
Ada posting blog baru di sini tentang hal itu blogs.msdn.com/b/dotnet/archive/2014/12/04/… tetapi masih sulit untuk memahami diagram itu. Apakah ini berarti WPF dan WinForms tidak dapat menggunakan .NET Core misalnya?
dodgy_coder
@dodgy_coder Saya pikir mereka akan, pada akhirnya, hanya saja Store Apps dan ASP.NET 5 adalah yang pertama menggunakan kerangka arsitektur baru.
Petr Abdulin
1
@dodgy_coder, Benar. Sampai sekarang aplikasi WPF dan WinForms tidak portabel untuk .net core. Mereka dapat dikembangkan kembali menjadi aplikasi universal windows. Lihat ini: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Jawaban:

154

Dari blog .NET Mengumumkan Pratinjau .NET 2015: Era Baru untuk .NET :

.NET Core memiliki dua komponen utama. Ini termasuk runtime kecil yang dibangun dari basis kode yang sama dengan .NET Framework CLR. NET Core runtime mencakup GC dan JIT (RyuJIT) yang sama, tetapi tidak menyertakan fitur seperti Domain Aplikasi atau Keamanan Akses Kode. Runtime dikirimkan melalui NuGet, sebagai bagian dari paket [ASP.NET Core].

.NET Core juga termasuk pustaka kelas dasar. Pustaka ini sebagian besar kode yang sama dengan pustaka kelas .NET Framework, tetapi telah difaktorkan (penghapusan dependensi) untuk memungkinkan kami mengirimkan kumpulan pustaka yang lebih kecil. Perpustakaan-perpustakaan ini dikirimkan sebagai Sistem. * Paket NuGet di NuGet.org.

Dan:

[ASP.NET Core] adalah beban kerja pertama yang mengadopsi .NET Core. [ASP.NET Core] berjalan pada .NET Framework dan .NET Core. Nilai kunci [ASP.NET Core] adalah dapat berjalan di beberapa versi [.NET Core] pada mesin yang sama. Situs web A dan situs web B dapat berjalan pada dua versi .NET Core yang berbeda pada mesin yang sama, atau mereka dapat menggunakan versi yang sama.

Singkatnya: pertama, ada Microsoft .NET Framework , yang terdiri dari runtime yang mengeksekusi kode aplikasi dan pustaka, dan pustaka kelas standar yang hampir sepenuhnya didokumentasikan .

Runtime adalah Common Language Runtime , yang mengimplementasikan Infrastruktur Bahasa Umum , bekerja dengan kompiler JIT untuk menjalankan bytecode CIL (sebelumnya MSIL) .

Spesifikasi dan implementasi Microsoft .NET diberi, mengingat sejarah dan tujuannya, sangat berpusat pada Windows dan IIS dan "gemuk". Ada variasi dengan lebih sedikit perpustakaan, ruang nama, dan jenis , tetapi sedikit di antaranya yang berguna untuk pengembangan web atau desktop atau merepotkan untuk port dari sudut pandang hukum .

Jadi untuk menyediakan versi .NET non-Microsoft, yang dapat berjalan pada mesin non-Windows, alternatif harus dikembangkan. Tidak hanya runtime yang harus diport untuk itu, tetapi juga seluruh Framework Class Library agar dapat diadopsi dengan baik. Selain itu, untuk sepenuhnya independen dari Microsoft, diperlukan kompiler untuk bahasa yang paling umum digunakan.

Mono adalah satu dari sedikit, jika bukan satu-satunya implementasi alternatif dari runtime , yang berjalan pada berbagai OS selain Windows, hampir semua ruang nama dari Framework Class Library pada. NET 4.5 dan VB dan C # compiler .

Masukkan .NET Core: implementasi open-source runtime , dan perpustakaan kelas dasar minimal. Semua fungsionalitas tambahan dikirimkan melalui paket NuGet, menggunakan runtime spesifik, pustaka kerangka kerja dan paket pihak ketiga dengan aplikasi itu sendiri.

ASP.NET Core adalah versi baru dari MVC dan WebAPI, yang dibundel bersama dengan abstraksi server HTTP yang tipis, yang berjalan pada runtime .NET Core - tetapi juga pada .NET Framework.

CodeCaster
sumber
4
Oh, karena itulah aku melewatkannya! Itu sebenarnya di bawah dalam timeline blog! Sayang sekali ..
Petr Abdulin
17
Itu semua barang baru dan hampir tidak dijelaskan, saya pikir Anda mengajukan pertanyaan yang bagus. :)
CodeCaster
3
Pada pemikiran kedua sepertinya itu bukan "posting berikutnya", karena deskripsi masih cukup singkat.
Petr Abdulin
2
Bukankah ini pada dasarnya apa yang vNext bawa pada kita?
ps2goat
3
Kami sudah melakukan itu sejak mereka mulai menerbitkan kerangka kerja melalui nuget. Tidak perlu untuk penyelesaian di pos itu.
ps2goat
84

Ini adalah sub-set dari .NET Framework, dimulai dengan edisi Compact Framework. Ini berkembang menjadi Silverlight, Windows Store dan Windows Phone. Itu fokus pada menjaga penyebaran kecil, cocok untuk unduhan cepat dan perangkat dengan kemampuan penyimpanan terbatas. Dan lebih mudah untuk menampilkan pada platform non-Windows, dan tentunya inilah alasan dipilihnya sebagai edisi open source. Bagian "sulit" dan "mahal" dari CLR dan perpustakaan kelas dasar dihilangkan.

Kalau tidak, itu selalu mudah untuk dikenali ketika Anda menargetkan versi kerangka kerja seperti itu, karena banyak barang akan hilang. Anda akan menggunakan kumpulan rakitan berbeda yang hanya memaparkan apa yang didukung oleh runtime. Itu disimpan di mesin Anda di C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoredirektori.


Pembaruan: setelah rilis .NET Core 2.0 Saya telah melihat beberapa angka representatif yang memberikan wawasan yang layak. Mereka telah bekerja keras mendukung kerangka kerja porting API ke .NET Core selama dua tahun terakhir. .NET Core 1.0 awalnya mendukung 13.000 API. .NET Core 2.0 menambahkan 20.000 API, sehingga totalnya menjadi 32.000 dan memungkinkan sekitar 70% dari paket NuGet yang ada untuk di-porting. Ada satu set API yang terlalu banyak dihubungkan ke Windows untuk mudah di-port ke Linux dan MacOS. Dicakup oleh Paket Kompatibilitas Windows yang baru dirilis, ia menambahkan 20.000 API.

Hans Passant
sumber
4
Dari posting blog saya tidak akan mengatakan seperti apa ini versi kerangka kerja 'kompak' lainnya. Diumumkan .NET Coreadalah versi 5.0 yang lebih tinggi dari kerangka penuh terbaru. Saya berasumsi bahwa itu berarti sesuatu yang berbeda.
Petr Abdulin
5
Saya baru saja menggambarkan sejarah versi .NETCore. Tidak ada yang baru di bawah matahari, sudah ada sejak lama. Perubahan pada 5.0 bersifat inkremental, jitter RyuJIT x64 baru adalah satu-satunya yang dapat saya pikirkan saat ini. Hanya perubahan lisensi yang benar-benar baru :)
Hans Passant
3
Saya mengerti maksud Anda. Meskipun saya masih berpikir bahwa kerangka kerja mengumumkan subset sebagai era berikutnya. NET agak berani.
Petr Abdulin
50

Saya telah menemukan artikel baru yang saya temukan pendek dan sangat bagus. Ini mencakup .NET Standard, .NET Core dan .NET Framework dan hubungan mereka. Saya sangat merekomendasikannya. Sayangnya, saya tidak punya waktu untuk beradaptasi dan menaruhnya di sini.

Konten jawaban asli di bawah:


Jadi, berdasarkan entri resmi terbaru tentang masalah ini, berikut adalah beberapa poin penting yang saya lihat:

.NET Core pada dasarnya adalah fork dari .NET Framework yang implementasinya juga dioptimalkan untuk masalah anjak piutang.

Kami menganggap .NET Core tidak khusus untuk .NET Native atau ASP.NET 5 - BCL dan runtimes adalah tujuan umum dan dirancang untuk bersifat modular. Dengan demikian, ini membentuk fondasi untuk semua .NET vertical.

Jadi .NET Native dan ASP.NET 5 hanyalah "subjek" uji untuk konfigurasi kerangka baru, sebagian ini mungkin karena mereka sangat berbeda:

Masukkan deskripsi gambar di sini

Lihat, mereka bahkan membutuhkan level rendah yang terpisah, tetapi sebagian besar BCL masih umum:

Kami menganggap .NET Core tidak khusus untuk .NET Native atau ASP.NET 5 - BCL dan runtimes adalah tujuan umum dan dirancang untuk bersifat modular. Dengan demikian, ini membentuk fondasi untuk semua .NET vertical.

Yaitu, persegi panjang magenta di atas akan ditambahkan secara masif dengan Model Aplikasi baru, tetapi pangkalan akan tetap umum.

Penyebaran NuGet:

Berbeda dengan .NET Framework, platform .NET Core akan dikirimkan sebagai paket NuGet. Kami telah menetap di NuGet karena di situlah mayoritas ekosistem perpustakaan sudah ada.

Hubungan dengan kerangka kerja saat ini:

Untuk Visual Studio 2015 tujuan kami adalah untuk memastikan bahwa .NET Core adalah bagian murni dari .NET Framework. Dengan kata lain, tidak akan ada celah fitur. Setelah Visual Studio 2015 dirilis, harapan kami adalah bahwa .NET Core akan versi lebih cepat daripada .NET Framework. Ini berarti bahwa akan ada titik waktu di mana fitur hanya akan tersedia pada platform berbasis .NET Core.

Ringkasan:

Platform .NET Core adalah .NET stack baru yang dioptimalkan untuk pengembangan sumber terbuka dan pengiriman tangkas di NuGet. Kami sedang bekerja dengan komunitas Mono untuk menjadikannya hebat di Windows, Linux dan Mac, dan Microsoft akan mendukungnya di ketiga platform.

Kami mempertahankan nilai-nilai yang diberikan oleh .NET Framework untuk pengembangan kelas perusahaan. Kami akan menawarkan distribusi .NET Core yang mewakili satu set paket NuGet yang kami uji dan dukung bersama. Visual Studio tetap menjadi pusat pengembangan Anda. Mengkonsumsi paket NuGet yang merupakan bagian dari distribusi tidak memerlukan koneksi Internet.

Pada dasarnya ini dapat dianggap sebagai. NET 4.6 dengan model distribusi yang berubah, yang, secara bersamaan, sedang dalam proses menjadi open source.

Petr Abdulin
sumber
22

Dokumentasi saat ini memiliki penjelasan yang bagus tentang .NET Core, area untuk digunakan, dan sebagainya. Karakteristik berikut paling baik mendefinisikan .NET Core:

Penempatan yang fleksibel : Dapat dimasukkan dalam aplikasi Anda atau diinstal berdampingan dengan pengguna atau di seluruh mesin.

Lintas-platform : Berjalan di Windows, macOS dan Linux; dapat porting ke OS lain. Sistem operasi (OS) yang didukung, CPU dan skenario aplikasi akan tumbuh seiring waktu, disediakan oleh Microsoft, perusahaan lain, dan individu.

Alat baris perintah : Semua skenario produk dapat dilakukan di baris perintah.

Cocok : .NET Core kompatibel dengan .NET Framework, Xamarin dan Mono, melalui .NET Standard Library.

Sumber terbuka : Platform .NET Core adalah open source, menggunakan lisensi MIT dan Apache 2. Dokumentasi dilisensikan di bawah CC-BY. .NET Core adalah proyek .NET Foundation.

Didukung oleh Microsoft : .NET Core didukung oleh Microsoft, per .NET Core Support

Dan inilah yang .NET Core meliputi:

.NET runtime, yang menyediakan sistem tipe, pemuatan perakitan, pemulung, interoperabilitas asli, dan layanan dasar lainnya.

Seperangkat pustaka kerangka kerja, yang menyediakan tipe data primitif, tipe komposisi aplikasi, dan utilitas mendasar.

Seperangkat alat SDK dan penyusun bahasa yang memungkinkan pengalaman pengembang basis, tersedia di .NET Core SDK.

Host aplikasi 'dotnet', yang digunakan untuk meluncurkan aplikasi .NET Core. Itu memilih runtime dan host runtime, memberikan kebijakan memuat perakitan dan meluncurkan aplikasi. Host yang sama juga digunakan untuk meluncurkan alat SDK dengan cara yang hampir sama.

Set
sumber
19

.NET Core adalah implementasi lintas platform baru dari standar .NET (ECMA 335) mirip dengan Mono tetapi dilakukan oleh Microsoft sendiri.

Lihat docs.microsoft.com

farfareast
sumber
18

Microsoft mengenali paradigma open source web masa depan dan memutuskan untuk membuka .NET ke sistem operasi lain. .NET Core adalah .NET Framework untuk Mac dan Linux. Ini adalah .NET Framework “ringan”, sehingga beberapa fitur / pustaka hilang.

Di Windows, saya masih akan menjalankan .NET Framework dan Visual Studio 2015. .NET Core lebih bersahabat dengan dunia open source seperti Node.js , npm, Yeoman , Docker , dll.

Anda dapat mengembangkan situs web lengkap dan API RESTful di Mac atau Linux dengan Visual Studio Code + .NET Core yang sebelumnya tidak mungkin. Jadi jika Anda menyukai Mac atau Ubuntu dan Anda adalah pengembang .NET, silakan dan atur.

Untuk Mono vs. .NET Core, Mono dikembangkan sebagai .NET Framework untuk Linux yang sekarang diakuisisi oleh Microsoft (perusahaan bernama Xamarin ) dan digunakan dalam pengembangan ponsel. Akhirnya, Microsoft dapat menggabungkan / memigrasi Mono ke .NET Core. Saya tidak akan khawatir tentang Mono sekarang.

Manish Jain
sumber
12

Saya mencoba untuk membuat proyek baru di Visual Studio 2017 hari ini (baru-baru ini ditingkatkan dari Visual Studio 2015) dan melihat serangkaian pilihan baru untuk jenis proyek. Entah mereka baru atau sudah lama sejak saya memulai proyek baru !! :)

Cuplikan Layar Visual Studio

Saya menemukan tautan dokumentasi ini dan merasa sangat berguna, jadi saya berbagi. Rincian peluru juga disediakan dalam artikel ini. Saya hanya memposting peluru di sini:

Anda harus menggunakan .NET Core untuk aplikasi server Anda ketika:

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

Anda harus menggunakan .NET Framework untuk aplikasi server Anda ketika:

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

Tautan ini menyediakan daftar istilah .NET.

joym8
sumber
11

Dari Situs Web Microsoft :

.NET Core merujuk pada beberapa teknologi termasuk .NET Core, ASP.NET Core dan Entity Framework Core.

Teknologi ini berbeda dari. NET asli dalam bahwa mereka berjalan menggunakan CoreCLR runtime (digunakan dalam Platform Universal Windows ).

Seperti yang Anda sebutkan dalam pertanyaan Anda, .NET Core tidak hanya open-source, tetapi juga portabel [berjalan pada MacOS, Windows, dan Linux]

Bagian dalam .NET Core juga dioptimalkan untuk tidak menggunakan modul yang berbeda dari pustaka inti kecuali diperlukan oleh aplikasi.

Salah Alshaal
sumber
4
".NET Core mengacu pada beberapa teknologi termasuk .NET Core" ... hal
Kieren Johnstone
3

Microsoft baru saja mengumumkan .NET Core v 3.0, yang merupakan versi yang lebih baik dari .NET Core.

Untuk lebih jelasnya kunjungi artikel hebat ini: Perbedaan Antara .NET Framework dan .NET Core dari April 2019.

itsikha
sumber
3
Jawaban khusus tautan dan terutama jawaban berdasarkan pendapat sangat tidak dianjurkan . Silakan lihat meta.stackexchange.com/a/8259
bunyi bip ganda
Mendapat itu, saya mengedit bagian opini .. terima kasih telah memberi tahu saya.
itsikha
1
Diperbaiki dengan cara apa? Bisakah Anda memberikan ringkasan tentang apa yang menurut Anda merupakan perubahan dan tambahan paling penting?
Peter Mortensen
3

.NET Core adalah kerangka kerja perangkat lunak komputer gratis dan open-source yang dikelola untuk sistem operasi Windows, Linux, dan macOS. Ini adalah open source, penerus lintas platform ke .NET Framework.

Aplikasi .NET Core didukung di Windows, Linux, dan macOS. Singkatnya .NET Core mirip dengan .NET framework, tetapi cross-platform, yaitu, memungkinkan aplikasi .NET berjalan di Windows, Linux dan MacOS. Aplikasi .NET framework hanya dapat berjalan di sistem Windows. Jadi perbedaan mendasar antara .NET framework dan .NET core adalah .NET Core adalah cross platform dan .NET framework hanya berjalan di Windows.

Selain itu, .NET Core memiliki injeksi ketergantungan bawaan oleh Microsoft dan Anda tidak perlu menggunakan perangkat lunak pihak ketiga / file DLL untuk injeksi ketergantungan.

Waleed Naveed
sumber
1
Bisakah Anda menguraikan injeksi ketergantungan? Apa arti sebenarnya dari konteks ini? Apakah Anda mengacu pada kerangka kerja tertentu? Apakah Anda memiliki beberapa referensi / tautan?
Peter Mortensen
1

.NET Core adalah versi open source dan cross platform .NET. Produk Microsoft, selain kemampuan hebat yang mereka miliki, selalu mahal untuk pengguna biasa, terutama pengguna akhir produk yang dibuat oleh teknologi .NET.

Sebagian besar pelanggan tingkat rendah lebih suka menggunakan Linux sebagai OS mereka dan sebelumnya. NET Core mereka tidak ingin menggunakan teknologi Microsoft, meskipun kemampuan mereka yang luar biasa. Tetapi setelah .NET Core produksi, masalah ini diselesaikan sepenuhnya dan kami dapat memuaskan pelanggan kami tanpa mempertimbangkan OS mereka, dll.

sajadre
sumber
Itu tidak diselesaikan sepenuhnya. Anda akan mengalami kesulitan menggunakan aplikasi Windows Forms atau WPF di Linux.
Peter Mortensen
0

.NET Core adalah versi open source dan cross platform dari .NET Framework.

JEuvin
sumber