.NET Core, .NET Framework ve Xamarin arasındaki fark nedir?


362

Microsoft artık .NET ailesinde .NET Core, .NET Framework ve Xamarin (Mono) var.

Burada çok fazla örtüşme var gibi görünüyor. Bu .NET türleri arasındaki fark nedir? Ne zaman projemde .NET Framework veya Xamarin yerine .NET Core kullanmayı seçmeliyim?


2
Güzel soru! İşte .net çerçevesi ve .net çekirdeği hakkında ek bir makale. pogsdotnet.blogspot.sg/2017/11/… Teşekkürler!
Allan Chua

Yanıtlar:


269

Buradaki belgelere göre aşağıdaki 6 tipik senaryoda .NET Framework veya Xamarin yerine .NET Core kullanmalısınız .

1. Çapraz Platform ihtiyaçları

Açıkçası, hedefiniz platformlar arasında (Windows, Linux ve MacOS) çalışması gereken bir uygulamaya (web / hizmet) sahip olmaksa, .NET ekosistemindeki en iyi seçenek .NET Core'u çalışma zamanı olarak kullanmaktır (CoreCLR) ) ve kütüphaneler platformlar arasıdır. Diğer seçenek Mono Projesini kullanmaktır.

Her iki seçenek de açık kaynaklıdır, ancak .NET Core doğrudan ve resmi olarak Microsoft tarafından desteklenmektedir ve ileriye doğru büyük bir yatırım yapacaktır.

Platformlarda .NET Core kullanıldığında, proje yönetimi, hata ayıklama, kaynak kontrolü, yeniden düzenleme, Intellisense dahil zengin düzenleme, test etme ve daha pek çok verimlilik özelliğini destekleyen Visual Studio IDE ile Windows'ta en iyi geliştirme deneyimi bulunmaktadır. Ancak, zengin geliştirme ve hata ayıklama dahil Mac, Linux ve Windows'ta Visual Studio Code kullanılarak da desteklenir. Sublime, Emacs, VI ve daha fazlası gibi üçüncü taraf editörler bile iyi çalışıyor ve açık kaynak Omnisharp projesini kullanarak editör zekası alabilirler.

2. Mikro hizmetler

Birden çok bağımsız, dinamik olarak ölçeklendirilebilir, durum bilgisi olan veya durumsuz mikro hizmetlerden oluşan mikro hizmet odaklı bir sistem oluştururken, burada sahip olduğunuz en büyük avantaj, mikro hizmet düzeyinde farklı teknolojiler / çerçeveler / diller kullanabilmenizdir. Bu, sisteminizdeki mikro alan başına en iyi yaklaşımı ve teknolojiyi kullanmanıza izin verir, bu nedenle çok performanslı ve ölçeklenebilir mikro hizmetler oluşturmak istiyorsanız, .NET Core'u kullanmalısınız. Sonunda, .NET Core ile uyumlu olmayan herhangi bir .NET Framework kütüphanesi kullanmanız gerekiyorsa, sorun yoktur, bu mikro hizmeti .NET Framework ile oluşturabilirsiniz ve gelecekte .NET ile değiştirebilirsiniz. Çekirdek.

Kullanabileceğiniz altyapı platformu çoktur. İdeal olarak, büyük ve karmaşık mikro servis sistemleri için Azure Service Fabric'i kullanmalısınız. Ancak durum bilgisi olmayan mikro hizmetler için Azure Uygulama Hizmeti veya Azure İşlevleri gibi diğer ürünleri de kullanabilirsiniz.

Haziran 2016 itibarıyla, Azure'daki her teknolojinin .NET Core'u desteklemediğini, ancak .NET Core'un RTM yayınlandığı için Azure'daki .NET Core desteğinin önemli ölçüde artacağını unutmayın.

3. En iyi performans ve ölçeklenebilir sistemler

Sisteminiz mümkün olan en iyi performansa ve ölçeklendirilebilirliğe ihtiyaç duyduğunda, kaç kullanıcıya sahip olursanız olun en iyi yanıt verebilmeniz için .NET Core ve ASP.NET Core'un gerçekten parladığı yerdir. Aynı miktarda altyapı / donanımla ne kadar çok şey yaparsanız, son kullanıcılarınız için sahip olduğunuz deneyim daha düşük maliyetle o kadar zengin olur.

Moore'un tek CPU'lar için performans iyileştirme günleri artık geçerli değil; yine de sisteminiz büyürken daha fazlasını yapmanız gerekir ve sayıları katlanarak büyüyen günlük talepkar kullanıcılar için daha yüksek ölçeklenebilirlik ve performansa ihtiyaç duyarsınız. Sonuçta daha verimli olmanız, her yerde optimize etmeniz ve sonuçta makine, VM ve CPU çekirdeği kümeleri arasında daha iyi ölçeklendirme yapmanız gerekir. Bu sadece kullanıcının memnuniyeti meselesi değildir; ayrıca maliyet / TCO büyük bir fark yaratabilir. Bu nedenle performans ve ölçeklenebilirlik için çabalamak önemlidir.

Belirtildiği gibi, sisteminizin küçük parçalarını mikro hizmetler veya herhangi bir gevşek bağlanmış yaklaşım olarak izole edebiliyorsanız, her bir küçük parçayı / mikro hizmeti bağımsız olarak geliştiremeyeceğiniz ve daha uzun vadede daha iyi olacağınız için daha iyi olacaktır. çeviklik ve bakım, ancak yapmanız gereken şey .NET Core ile uyumlu değilse, başka bir teknolojiyi mikro hizmet düzeyinde kullanabileceksiniz. Ve sonunda yeniden düzenleyebilir ve mümkün olduğunda .NET Core'a getirebilirsiniz.

4. Mac, Linux veya Windows için komut satırı stili geliştirme.

.NET Core kullanılırken bu yaklaşım isteğe bağlıdır. Tabii ki, tam Visual Studio IDE'yi de kullanabilirsiniz. Ancak, hafif editörler ve yoğun komut satırı kullanımı ile geliştirmek isteyen bir geliştiriciyseniz, .NET Core CLI için tasarlanmıştır. Desteklenen tüm platformlarda kullanılabilen basit komut satırı araçları sunarak geliştiricilerin geliştirici, laboratuvar veya üretim makinelerine minimum kurulumla uygulamalar oluşturup test etmesini sağlar. Visual Studio Code gibi editörler, geliştirme deneyimleri için aynı komut satırı araçlarını kullanır. IDE'ler de Visual Studio gibi aynı CLI araçlarını kullanıyor ancak bunları zengin bir IDE deneyiminin arkasına saklıyor. Geliştiriciler artık CLI'dan editörden IDE'ye araç zinciri ile etkileşim kurmak istedikleri seviyeyi seçebiliyorlar.

5. Uygulama düzeyi başına .NET sürümlerinin yan yana olması gerekir.

.NET'te farklı çerçeve sürümlerine bağımlılık içeren uygulamalar yüklemek istiyorsanız, bu belgede daha önce açıklandığı gibi% 100 yan yana sağlayan .NET Core'u kullanmanız gerekir.

6. Windows 10 UWP .NET uygulamaları.

Ayrıca, şunları da okumak isteyebilirsiniz:

  1. Ne zaman gerekir DEĞİL .NET Çekirdek kullanılır?
  2. .NET Core yerine .NET Framework 4.x'i ne zaman kullanmalıyım?
  3. .NET Core yerine Xamarin'i ne zaman kullanmalıyım?

17
Neden asp.net Core daha performanslı? Mikro hizmetler oluştururken neden daha iyi?
Juan Zamudio

4
Artık Mac için Visual Studio da kullanılabilir. Yani .NET Core'a doğru bir olumlu nokta daha var. visualstudio.com/vs/visual-studio-mac
Husyn

8
Bağlantılarınız bozuldu
shaneparsons

2
@JuanZamudio Çerçevenin sürümleri, her biri hemen önceki sürüme bağımlı olan yekpare katmanlardır ve bağımlılık zincirine geri dönmüştür. Sonuç olarak, 4.5'ten bir şey kullanırsanız , dolaylı olarak geri 2.0'a kadar her şeye güvenirsiniz. Çekirdek çerçeve, çoğunlukla ancak tamamen değişmeyen API'yi yeniden yazmaktan ziyade alakasız bagajları ortadan kaldırmak için bağımlılıkları yeniden düzenlemekle ilgilidir. EF Core gibi bazı şeyler de büyük ölçüde basitleştirildi.
Peter Wone

Açıklayıcı cevap için teşekkürler
Tolga Kartal

171

Microsoft bunu şöyle açıklıyor:

.NET Framework, .NET Core, Xamarin

.NET Framework , Windows ile dağıtılan .NET'in "tam" veya "geleneksel" lezzetidir. Bir masaüstü Windows veya UWP uygulaması oluştururken veya daha eski ASP.NET 4.6+ ile çalışırken bunu kullanın.

.NET Core , Windows, Mac ve Linux üzerinde çalışan platformlar arası .NET'tir. Docker kapları dahil olmak üzere herhangi bir platformda çalışabilecek konsol veya web uygulamaları oluşturmak istediğinizde bunu kullanın. Buna şu anda UWP / masaüstü uygulamaları dahil değildir.

Xamarin , iOS, Android veya Windows Phone cihazlarında çalışabilen mobil uygulamalar oluşturmak için kullanılır.

Xamarin genellikle üstünde çalıştığı Mono Microsoft resmi olarak .NET Core çapraz platform gitmeye karar önce çapraz platform desteği için inşa edilmiş .NET bir sürümüdür. Xamarin gibi, Birlik platformu da Mono'nun üstünde çalışır.


Yaygın bir karışıklık noktası, ASP.NET Core'un uyduğu yerdir. ASP.NET Core, bu yanıtta ayrıntılı olarak açıklandığı gibi .NET Framework (Windows) veya .NET Core (çapraz platform) üzerinde çalışabilir: ASP arasındaki fark. NET Core (.NET Core) ve ASP.NET Core (.NET Framework)


3
Birisi .NET Core'un platformlar arası olduğunu söylediğinde , yeni bir geliştirici karıştırılır. '.NET Core' yalnızca UWP + ASP.NET Core'u destekler ve ASP.NET Core çapraz platformdur, UWP desteklemez .
Hassan Tareq

@HassanTareq Bu doğru değil. .NET Core, Windows, Mac veya Linux üzerinde çalışabilen çalışma zamanı ve kütüphaneleri ifade eder. ASP.NET Core platformlar arasıdır çünkü .NET Core platformlar arasıdır.
Nate Barbettini

Net çekirdeği ( çalışma zamanı ve kütüphaneler ) çapraz platform olmasına rağmen , Mac / Linux'ta UWP uygulamasını kullanamadığımızdan bahsederseniz, yeşiller için yararlı olacaktır . UWP çapraz platform değil, UWP'nin WPF (Xamarin.Forms is)
Hassan Tareq

@HassanTareq İyi öneri, cevabımı düzenledim.
Nate Barbettini

1
Xamarin Forms artık tek bir kod tabanından neredeyse her şey üzerinde çalışıyor. Windows UWP masaüstü, WPF masaüstü, MacOS, iOS, Android ve Tizen (TV'ler). Varsayılan, Core uygulamasından .NET Standard'ı hedeflemektir. İyi zamanlar!
Sean Anderson

35

Bu satırda başvurabilirsiniz - ASP.NET Core (.NET Core) ve ASP.NET Core (.NET Framework) arasındaki fark

.NET Framework, .NET Core, Xamarin

Xamarin hiç tartışma değil. C # kullanarak mobil (iOS, Android ve Windows Mobile) uygulamalar oluşturmak istediğinizde Xamarin tek seçeneğinizdir.

.NET Framework , Windows ve Web uygulamalarını destekler. Bugün, .NET Framework'te Windows uygulamaları oluşturmak için Windows Forms, WPF ve UWP'yi kullanabilirsiniz. ASP.NET MVC, .NET Framework'te Web uygulamaları oluşturmak için kullanılır.

.NET Core , Windows, Mac ve Linux dahil tüm işletim sistemleri için uygulamalar oluşturmak üzere yeni açık kaynaklı ve çapraz platform çerçevesidir. .NET Core yalnızca UWP ve ASP.NET Core'u destekler. UWP, Windows 10'u Windows ve mobil uygulamaları hedeflemek için kullanılır. ASP.NET Core tarayıcı tabanlı web uygulamaları oluşturmak için kullanılır.

daha fazla ayrıntı istiyorsanız bu bağlantılara bakın
https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ https://docs.microsoft.com/en-us/dotnet/articles / standardı / seçme çekirdekli-çerçeve-sunucu


12
  1. .NET , c # diline dayalı ekosistemdir
  2. .NET Standard , .NET Ekosisteminin Standardıdır (başka bir deyişle spesifikasyon) .

.Net Core Class Library, .Net Standardı üzerine kurulmuştur . .NET Standard, yalnızca bağımsız olarak yürütülemeyen ve başka bir .NET Core veya .NET Framework yürütülebilir projesi tarafından başvuruda bulunulması gereken sınıf kitaplığı projesi yapabilirsiniz . .Net Framework , .Net Core ve Xamarin , bir .Net Standart Kütüphanesi seçin

  1. .NET Framework dayalı bir çerçeve .NET ve Windows ve Web uygulamalarını destekler

(.NET Framework ile yürütülebilir proje (Konsol uygulaması veya ASP.NET uygulaması gibi) yapabilirsiniz

  1. ASP.NET , .NET Framework üzerine inşa edilmiş bir web uygulaması geliştirme teknolojisidir.
  2. .NET Çekirdek ayrıca dayalı bir çerçeve .NET .

Windows, Mac ve Linux dahil tüm işletim sistemleri için uygulamalar oluşturmak için yeni açık kaynaklı ve çapraz platform çerçevesidir.

  1. Xamarin , C # kullanarak bir çapraz platform mobil uygulaması ( iOS, Android ve Windows Mobile ) geliştirmek için bir çerçevedir

Uygulama desteği .NET Standard [mavi] ve .NET Standardı (en son tam destek için asgari canlı platformu: [ https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation- destek] )


"Sürüm Geçmişi" tablosu için aşağı oy. Bu, yeniden oluşturduğunuz .net / standard veya core'un "Sürüm Geçmişi" değildir. Belirli bir .Net standart sürümüyle eşleşmek istiyorsanız kullanabileceğiniz minimum uygulanabilir platform sürümüdür. EG: Tam .NET'te .NET Standard 1.4'ü desteklemek istiyorsanız, kullanabileceğiniz en düşük sürüm 4.6.1
shawty

Aşağı Oy kaldırıldı, şimdi cevabınızı doğru bir şekilde güncellediğiniz ve belgelediğinize göre :-)
shawty

7

.NET 5 , Kasım 2020'de gelen tüm .NET varyantlarının birleşik bir sürümü olacaktır, bu nedenle artık varyantlar arasında seçim yapmaya gerek kalmayacaktır. resim açıklamasını buraya girin


1
Bu bir yalan. .NET Core, Linux'ta WPF / WinForms'u destekleyemez!
Vincent

Bu doğru, ancak .NET'in diğer varyantları da bunu desteklemedi. .NET'in bir varyantı için seçim gitti, bu iyi bir şey.
yanlend

1

.NET Core, şu anda kullanmanız gereken .NET'in geçerli sürümüdür (daha fazla özellik, sabit hata, vb.)

Xamarin, C # ile kodlanmış çapraz platform mobil sorunlarına çözümler sunan bir platformdur, böylece Swift'i IOS için ayrı ayrı kullanmanız gerekmez ve aynı şey Android için de geçerlidir.


2
Net Core'u Linux veya Linux ve Windows üzerinde çalıştırmanız gerekiyorsa kullanmanız gerektiğini söyleyebilirim. Ama bu davayı Mono için de yapabilirsiniz. Kesinlikle daha fazla özelliği yok. Tanım olarak sadece "çekirdek" bitlerdir, sadece Windows bitlerinin hiçbirine sahip değildir, bu nedenle daha az özelliğe sahiptir. Ve sadece tahmin ediyorum ama .Net Core'un daha az hataya sahip olması pek mümkün görünmüyor. .Net Framework neredeyse yirmi yıldır dünyada. Bu noktada savaşta oldukça sert olduğunu hayal edebiliyorum. Ama bu sadece bir tahmin.
Jason Boyd

Kesinlikle daha yeni özelliklere sahip, yakın zamanda .NET 4.8'e eklenmeyecek yeni sınıflar eklediler. Ayrıca WPF ve WinForms'u taşıdılar. Aslında .NET Core .NET Framework'ün yerini alabilir gibi görünüyor. Daha performans sergiliyor gibi görünüyor.
asdf

0

Xamarin telefon uygulamaları için kullanılır (her ikisi de IOS / Android). .NET Core, hem Apache hem de IIS üzerinde çalışabilen Web uygulamaları tasarlamak için kullanılır.

İki cümle arasındaki fark budur.


Hmm .. 3. seçeneği (.net framework) eksik olmasının yanı sıra tamamen doğru değil. .NET core hemen hemen her şeyde kullanılabilir (Web, Masaüstü, Mobil, Bulut, Oyun, IoT vb.). .NET Framework, Windows merkezli ve tamamen kapatıldı. Mono, Xamarin tarafından kullanılan ve çapraz platform mobil araçlarını mono'nun üzerine koyan .NET Framework'ün açık kaynaklı (topluluk güdümlü) sürümüdür. Xamarin nihayetinde büyük olasılıkla Blazor tarafından değiştirilecektir (şu anda pwa, ancak yerel olan hibrit yol haritasının bir parçasıdır).
shox

Bu doğru. Xamarin mobil uygulamalar içindir. Yakında değiştirileceğini sanmıyorum. ASMX hala Web Hizmetleri için kullanılmaktadır ve Visual 2019'da bulunmaktadır.
user10868910

-1

Mayıs 2019'da güncellendi

.Net Core 3.0 ve sonraki sürümlerini bir sonraki sürümüne yükseltmek için kullanmalısınız. Net 5, tek ihtiyacınız olan tek bir birleşik platformdur.

Gelecekte yalnızca bir .NET olacak ve bunu Windows> Linux, macOS, iOS, Android, tvOS, watchOS ve WebAssembly ve daha fazlasını hedeflemek için kullanabileceksiniz. https://devblogs.microsoft.com/dotnet/introducing-net-5/


Bu cevap mantıklı değil.
Kiril1512
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.