.NET Core ve .NET Standard Karşılaştırması. .NET Framework, Resim-1’de göreceğiniz gibi dikey alt kümelerden oluşan bir Framework. Bu dikey alt kümelerin her biri farklı bir ekip tarafından geliştirildiği için aslında birbirinden bağımsız, farklı uygulama modeline, Framework ve Runtime’a sahipti ve her zaman tek bir ünite olarak Deploy edilecek şekilde tasarlanmıştı.
Bu durum aslında belirli bir dikeyde uygulama geliştiriyorsanız herhangi bir problem oluşturmasa da, farklı dikey alt kümeler için geliştirmek istenildiği zaman, kullanılan API’ların farklı alt kümeler için de desteklenmesi gibi bir sorunla karşılaşabiliyorduk.
Resim-1 .Eski Net Mimarisi
Portable Class Libraries (PCL) ve Shared Projects ne güne duruyor diyebilirsiniz ama yine birden fazla proje, Compiler Directive (#if) gibi uğraşmamız gereken kısımlar vardı. Konumuz PCL ve Shared Projects olmadığı için fazla dağılmadan devam edelim.
Cross-platform (yani platform bağımsız) uygulama geliştirmenin yükselişe geçmesiyle birlikte, .NET mimarisinde de köklü bir değişim ihtiyacı doğdu.
.NET Core, Windows, Linux ve MacOS üzerinde çalışabilen (cross-platform), Microsoft ve GitHub üzerinde Community tarafından desteklenen Open Source bir geliştirme platformu. Peki .NET Core hangi bileşenlerden oluşuyor?
- Type system, Assembly Loading, Garbage Collector, Native Interop ve diğer basit servisleri içeren bir .NET Runtime,
- Primitive Data tipleri, App Composition tipleri gibi Framework Library’leri
- SDK gereçleri and Compiler içeren .NET Core SDK.
- .NET Core uygulamalarını çalıştırmak için gerekli olan ‘Dotnet’ App Host.
.NET Framework’ü bir kenara bırakırsak, temelde .NET Core ile Mono Cross-platform olması açısından benzerlik gösterse de aralarında ciddi farklar var:
- .NET Core, aslında tek bir uygulama modeli içeriyor: Console uygulamaları. ASP.NET Core ve UWP (Windows 10 Universal Windows Platform) .NET Core’un üzerine fonksiyonalitesini genişletecek şekilde inşa ediliyor. Mono ise bir çok .NET Framework uygulama modeli (Windows.forms vb) ile birlikte Xamarin.iOS gibi Xamarin platformunu da destekliyor.
- Mono geniş bir .NET Framework API desteğine sahip. (bkz http://docs.go-mono.com/?link=root%3a%2fclasslib )
- Son zamanlarda Mono mobil platformlar üzerine yoğunlaşırken, .NET Core Cloud Workload üzerine yoğunlaşıyor.
Peki .NET Core her işletim sistemini destekliyor mu? .NET Core (v1.0) için kullanabileceğiniz işletim sistemleri ile ilgili olarak da Tablo-1‘i inceleyebilirsiniz.
İşletim Sistemi | Versiyon | İşlemci Mimarisi |
Windows Client | 7 SP1 – 10 | x64, x86 |
Windows Server | 2008 R2 SP1 – 2016 | x64, x86 |
Red Hat Enterprise Linux | 7.2 | x64 |
Fedora | 23 | x64 |
Debian | 8.2 | x64 |
Ubuntu | 14.04 LTS, 16.04 LTS | x64 |
Linux Mint | 17 | x64 |
openSUSE | 13.2 | x64 |
Centos | 7.1 | x64 |
Oracle Linux | 7.1 | x64 |
Mac OS X | 10.11, 10.12 | x64 |
Tablo-1: .NET Core desteklenen işletim sistemleri
.NET Core ile birlikte .Net mimarisi içerisinde Resim-2′de
göreceğiniz bir ayrımdan bahsettik. Fakat burada da her bir dikeyin kendine özgü bir base library’e sahip olması tam olarak ortak bir kullanıma olanağı sağlamıyordu. .NET Framework’ten bildiğimiz Base Class Library, .NET Core tarafında .NET Core Library ve Xamarin için ise Mono Class Library şeklinde bir ayrım söz konusu.
Resim-2: .NET Framework, .Net Core ve Xamarin
Buna çözüm de bütün dikeylerin kullanacağı ortak bir Library: .NET Standard. (bkz.Resim-3) .NET Standard’ı bütün .NET platformlarının Implemente etmesi gereken bir API seti olarak tanımlayabiliriz. Böylece bütün .NET Runtime’ların kullanacağı PCL’ler oluşturma şansına sahibiz. Aslında .NET Standard’ı bir PCL olarak düşünebiliriz, ama aralarındaki en büyük fark PCL’ler Microsoft platformlarını desteklerken .NET Standart ise platform bağımsız.
Resim-3: Günümüzde .NET Mimarisi
.NET Runtime’lar farklı .NET Standard versiyonları destekler. Burada dikkat edilmesi gereken kısımın en yüksek .NET Standart versiyonun destekleyen Runtime’ın daha önceki versiyonları da aslında implemente etmesidir. Örnek olarak; .NET Framework 4.6.2, .NET Standard 1.5’i desteklerken, 1.5 öncesinden yer alan bütün .NET Standard API’larını da içerir. Desteklenen versiyon listesini Tablo-2‘den inceleyebilirsiniz.
Platform | ||||||||
.NET Standard | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 2.0 |
.NET Core | → | → | → | → | → | → | 1.0 | vNext |
.NET Framework | → | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.2 | vNext | 4.6.1 |
Mono/Xamarin Platforms | → | → | → | → | → | → | → | vNext |
Universal Windows Platform | → | → | → | → | 10.0 | → | → | vNext |
Windows | → | 8.0 | 8.1 | |||||
Windows Phone | → | → | 8.1 | |||||
Windows Phone Silverlight | 8.0 |
Tablo-2: .NET Standard desteklenen .NET Runtime
Kısaca özetlemek gerekirse .NET Core, .NET Framework’ün yerini alacak bir platform değil. Eğer Cross-platform uygulama geliştirmiyorsanız .NET Core kullanmanıza gerek yok. Şu anda çoğu 3rd Party API’ın da (henüz) .NET Core desteği bulunmadığını da belirtmekte fayda var.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://blogs.msdn.microsoft.com/dotnet/2014/12/04/introducing-net-core/
https://github.com/dotnet/core/blob/master/roadmap.md
https://docs.microsoft.com/en-us/dotnet/articles/standard/components
https://docs.microsoft.com/en-us/dotnet/articles/standard/library
https://weblog.west-wind.com/posts/2016/Jun/13/ASPNET-Core-and-NET-Core-Overview
TAGs : .NET Core ve .NET Standard, .NET Core ve .NET Standard karsilastirma, .NET Core ve .NET Standard farklari, .NET Core ve .NET Standard nedir, .NET Core ve .NET Standard kod gelistirme, .NET Core ve .NET Standard, .net library, .net altindaki diller