“.NET Core” nedir?


323

Son zamanlarda resmi bir .NET Framework Blogunda .NET Core'un açık kaynak olacağı açıklandı .

İronik bir şekilde, yazar , bir sonraki yazıda .NET Core'un ne olacağını açıklayacaktır. Başka bir duyuru bölümünde daha fazla ayrıntı belirtilmiştir .

Verilen bir diyagramdan:

.NET Çekirdek diyagramı

ve makaleler metin kendisi, ben .NET Core (açık kaynaklı olmak gibi bariz şeyler yanında) tam .NET modüler bir yeniden uygulama olduğunu varsayalım. Yani çerçeve bileşenleri, NuGet paketlerinin yüklendiği gibi gerektiği gibi yüklenir. Ve şimdi ASP.NET 5 zaten uygulanmış modüllerden biridir. .NET Core hakkındaki anlayışım doğru mu? Belki bir şey eksik?


Ben bulduk son makale ben eteğine ve çok iyi de bulundu. .NET Standard, .NET Core ve .NET Framework ve ilişkilerini kapsar. Şiddetle tavsiye ederim.


5
Burada yeni bir blog yazısı var blogs.msdn.com/b/dotnet/archive/2014/12/04/… ama bu diyagramı anlamak hala zor. Bu WPF ve WinForms'un .NET Core'u kullanamayacağı anlamına mı geliyor?
dodgy_coder

@dodgy_coder Bence onlar sadece Mağaza Uygulamaları ve ASP.NET 5 yeni çerçeve mimarisini ilk kullanacaklar.
Petr Abdulin

1
@dodgy_coder, Doğru. WPF ve WinForms uygulamaları şimdilik .net çekirdeğine taşınabilir değil. Windows evrensel uygulamalarına yeniden geliştirilebilirler. Şuna
VivekDev

Yanıtlar:


154

.NET blogundan .NET 2015 Önizleme: .NET için Yeni Bir Çağ :

.NET Core'un iki ana bileşeni vardır. .NET Framework CLR ile aynı kod tabanından oluşturulan küçük bir çalışma zamanı içerir. .NET Core çalışma zamanı aynı GC ve JIT'i (RyuJIT) içerir, ancak Uygulama Etki Alanları veya Kod Erişim Güvenliği gibi özellikleri içermez. Çalışma zamanı [ASP.NET Core] paketinin bir parçası olarak NuGet aracılığıyla teslim edilir.

.NET Core, temel sınıf kitaplıklarını da içerir. Bu kitaplıklar büyük ölçüde .NET Framework sınıf kitaplıklarıyla aynı koddur, ancak daha küçük bir kitaplık kümesi göndermemizi sağlamak için faktörlere (bağımlılıkların kaldırılması) neden olmuştur. Bu kütüphaneler System olarak gönderilir. * NuGet.org üzerinde NuGet paketleri.

Ve:

[ASP.NET Core], .NET Core'u benimseyen ilk iş yüküdür. [ASP.NET Core] hem .NET Framework hem de .NET Core üzerinde çalışır. [ASP.NET Core] 'un önemli bir değeri, aynı makinede [.NET Core]' un birden çok sürümünde çalışabilmesidir. Web sitesi A ve web sitesi B, aynı makinede iki farklı .NET Core sürümü üzerinde çalışabilir veya aynı sürümü kullanabilir.

Kısacası: ilk olarak, uygulama ve kitaplık kodunu çalıştıran bir çalışma zamanından ve neredeyse tamamen belgelenmiş standart sınıf kitaplığından oluşan Microsoft .NET Framework vardı .

Çalışma zamanı olduğunu ortak dil çalışma zamanı uygular, Ortak Dil Altyapı ile çalışır JIT derleyicisi çalıştırmak için CIL (eski MSIL) bayt kodu .

Microsoft'un .NET spesifikasyonu ve uygulaması, geçmişi ve amacı göz önüne alındığında, çok Windows ve IIS merkezli ve "şişman" idi. Daha az kitaplık, ad alanı ve türü olan varyasyonlar vardır , ancak bunlardan azı web veya masaüstü geliştirme için yararlıdır veya yasal açıdan bağlantı açısından zahmetlidir .

Bu nedenle, Windows dışındaki makinelerde çalışabilen Microsoft'un .NET dışı bir sürümünü sağlamak için bir alternatif geliştirilmeliydi. Bunun için sadece çalışma zamanının taşınması değil, aynı zamanda tüm Çerçeve Sınıf Kitaplığı'nın da benimsenmesi gerekir. Bunun da ötesinde, Microsoft'tan tamamen bağımsız olmak için, en sık kullanılan diller için bir derleyici gerekecektir.

Mono , Windows dışında çeşitli işletim sistemlerinde çalışan , çalışma zamanının tek alternatif uygulaması olmasa da, .NET 4.5 ve VB ve C # derleyicisinden Framework Class Kitaplığındaki neredeyse tüm ad alanlarından biridir .

.NET Core girin: çalışma zamanının açık kaynaklı bir uygulaması ve en az temel sınıf kitaplığı. Tüm ek işlevler, uygulamanın kendisiyle belirli çalışma zamanını, çerçeve kitaplıklarını ve üçüncü taraf paketlerini dağıtan NuGet paketleri aracılığıyla sağlanır.

ASP.NET Core, .NET Core çalışma zamanında - aynı zamanda .NET Framework'te çalışan ince bir HTTP sunucusu soyutlamasıyla birlikte yeni bir MVC ve WebAPI sürümüdür.


4
Oh, işte böyle özledim! Aslında blogun zaman çizelgesinde aşağıdaydı! Böyle bir utanç ..
Petr Abdulin

17
Tamamen yeni şeyler ve zar zor açıklanmış, bence iyi bir soru sordunuz. :)
CodeCaster

3
İkinci bir düşüncede, açıklama hala oldukça kısa olduğu için "sonraki gönderi" gibi görünmüyor.
Petr Abdulin

2
VNext'in bize getirdiği şey bu değil miydi?
ps2goat

3
Bunu nuget üzerinden çerçeveyi yayınlamaya başladıklarından beri yapıyoruz. Bu gönderi için geçici çözüm gerekmez.
ps2goat

84

Compact Framework sürümüyle başlayan .NET Framework'ün bir alt kümesidir. Silverlight, Windows Mağazası ve Windows Phone'a geçti. Hızlı indirme ve sınırlı depolama kapasitesine sahip cihazlar için dağıtımı küçük tutmaya odaklandı. Ve Windows olmayan platformları açmak daha kolaydır ve açık kaynaklı sürüm olarak seçilmesinin nedeni de budur. CLR ve temel sınıf kütüphanelerinin "zor" ve "pahalı" bölümleri çıkarılır.

Aksi takdirde, böyle bir çerçeve sürümünü hedeflediğinizde tanımak her zaman kolaydır, çünkü birçok güzellik eksik olacaktır. Yalnızca çalışma zamanı tarafından desteklenenleri ortaya çıkaran farklı bir referans derlemeleri kümesi kullanacaksınız. Makinenizde C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoredizinde saklanır .


Güncelleme: .NET Core 2.0 sürümünden sonra, iyi bir fikir veren bazı temsili numaralar gördüm. Son iki yıldır .NET API'ye çerçeve API'lerini geri taşımakta zorlandılar. .NET Core 1.0 başlangıçta 13.000 API'yi destekledi. .NET Core 2.0, toplam 32.000'e getiren ve mevcut NuGet paketlerinin yaklaşık% 70'inin taşınmasına izin veren 20.000 API ekledi. Linux ve MacOS'a kolayca bağlanamayacak kadar Windows'a çok fazla bağlanmış bir dizi API vardır. Yakın zamanda piyasaya sürülen Windows Uyumluluk Paketi kapsamında 20.000 API daha ekleniyor.


4
Blog gönderisinden bunun başka bir 'kompakt' çerçeve sürümüne neye benzediğini söyleyemem. İlan edilen .NET Coreson tam çerçeve daha yüksektir sürüm 5.0 olduğunu. Sanırım bunun farklı bir şey olduğunu kastediyorlar.
Petr Abdulin

5
Sadece .NETCore sürümünün geçmişini anlattım. Güneşin altında yeni bir şey yok, uzun zamandır var. 5.0'daki değişiklikler artımlı, şu an aklıma gelen tek RyuJIT x64 jitter. Sadece lisans değişikliği gerçekten yeni :)
Hans Passant

3
Ne demek istediğini anladım. Yine de .NET'in bir sonraki dönemi olarak çerçeve alt kümesini duyurmanın biraz cesur olduğunu düşünüyorum.
Petr Abdulin

50

Ben bulduk son makale ben eteğine ve çok iyi de bulundu. .NET Standard, .NET Core ve .NET Framework ve ilişkilerini kapsar. Şiddetle tavsiye ederim. Ne yazık ki, adapte etmek ve buraya koymak için zamanım yok.

Aşağıdaki orijinal cevap içeriği:


Yani, konuyla ilgili en son resmi girişe dayanarak, onları gördüğüm bazı önemli noktalar:

.NET Core aslında uygulaması faktoring kaygıları etrafında optimize edilmiş bir .NET Framework çatal.

.NET Core'un .NET Native veya ASP.NET 5'e özgü olmadığını düşünüyoruz - BCL ve çalışma zamanları genel amaçlıdır ve modüler olarak tasarlanmıştır. Bu nedenle, gelecekteki tüm .NET sektörleri için temel oluşturur.

.NET Native ve ASP.NET 5, yeni çerçeve yapılandırması için sadece bir test "konuları" dır, kısmen farklı olabilirler:

Resim açıklamasını buraya girin

Bakın, ayrı düşük seviyeye bile ihtiyaçları var, ancak BCL'nin büyük bir kısmı hala yaygın:

.NET Core'un .NET Native veya ASP.NET 5'e özgü olmadığını düşünüyoruz - BCL ve çalışma zamanları genel amaçlıdır ve modüler olarak tasarlanmıştır. Bu nedenle, gelecekteki tüm .NET sektörleri için temel oluşturur.

Yani, üstte kırmızı dikdörtgenler yeni Uygulama Modelleri ile büyük ölçüde eklenecek, ancak taban yaygın kalacak.

NuGet dağıtımı:

.NET Framework'ün aksine, .NET Core platformu bir dizi NuGet paketi olarak teslim edilecektir. NuGet'e yerleştik çünkü kütüphane ekosisteminin çoğunluğu zaten burada.

Mevcut çerçevelerle ilişki:

Visual Studio 2015 için amacımız .NET Core'un .NET Framework'ün saf bir alt kümesi olduğundan emin olmaktır. Başka bir deyişle, herhangi bir özellik boşluğu olmazdı. Visual Studio 2015 yayınlandıktan sonra, .NET Core'un .NET Framework'ten daha hızlı sürüm yapması beklenmektedir. Bu, bir özelliğin yalnızca .NET Core tabanlı platformlarda kullanılabileceği zaman noktalarının olacağı anlamına gelir.

Özet:

.NET Core platformu, açık kaynak geliştirme ve NuGet üzerinde çevik dağıtım için optimize edilmiş yeni bir .NET yığınıdır. Windows, Linux ve Mac'te mükemmelleştirmek için Mono topluluğu ile çalışıyoruz ve Microsoft bu üç platformda da destekleyecek.

.NET Framework'ün kurumsal sınıf geliştirmeye sağladığı değerleri koruyoruz. Birlikte test ettiğimiz ve desteklediğimiz bir dizi NuGet paketini temsil eden .NET Core dağıtımları sunacağız. Visual Studio geliştirme için tek adresinizdir. Bir dağıtımın parçası olan NuGet paketlerini tüketmek için İnternet bağlantısı gerekmez.

Temel olarak bu, aynı anda açık kaynak olma sürecinde olan değişen bir dağıtım modeliyle .NET 4.6 olarak düşünülebilir.


22

Mevcut belgeler , .NET Core'un ne olduğu, kullanım alanları vb. Hakkında iyi bir açıklamaya sahiptir. Aşağıdaki özellikler .NET Core'u en iyi tanımlar:

Esnek dağıtım : Uygulamanıza dahil edilebilir veya kullanıcı veya makine genelinde yan yana kurulabilir.

Çapraz platform : Windows, macOS ve Linux üzerinde çalışır; diğer işletim sistemlerine taşınabilir. Desteklenen işletim sistemleri (OS'ler), CPU'lar ve uygulama senaryoları Microsoft, diğer şirketler ve kişiler tarafından sağlanan zaman içinde büyüyecektir.

Komut satırı araçları : Tüm ürün senaryoları komut satırında uygulanabilir.

Uyumlu : .NET Core, .NET Standart Kütüphanesi aracılığıyla .NET Framework, Xamarin ve Mono ile uyumludur.

Açık kaynak : .NET Core platformu, MIT ve Apache 2 lisanslarını kullanan açık kaynak kodludur. Dokümantasyon CC-BY lisansı altındadır. .NET Core bir .NET Foundation projesidir.

Microsoft tarafından desteklenir: .NET Core, Microsoft tarafından, .NET Core Desteği'ne göre desteklenir

Ve .NET Core şunları içerir:

Bir tip sistemi, montaj yükleme, çöp toplayıcı, yerel birlikte çalışabilirlik ve diğer temel hizmetleri sağlayan bir .NET çalışma zamanı.

İlkel veri türleri, uygulama kompozisyon türleri ve temel yardımcı programlar sağlayan bir dizi çerçeve kitaplığı.

.NET Core SDK'da bulunan temel geliştirici deneyimini etkinleştiren bir dizi SDK aracı ve dil derleyicisi.

.NET Core uygulamalarını başlatmak için kullanılan 'dotnet' uygulama ana bilgisayarı. Çalışma zamanını seçer ve çalışma zamanını barındırır, bir montaj yükleme politikası sağlar ve uygulamayı başlatır. Aynı ana bilgisayar, SDK araçlarını aynı şekilde başlatmak için de kullanılır.


19

.NET Core, Mono'ya benzer ancak Microsoft'un kendisi tarafından yapılan .NET standartlarının (ECMA 335) yeni bir platformlar arası uygulamasıdır.

Bkz. Docs.microsoft.com


18

Microsoft gelecekteki web açık kaynak paradigmasını tanıdı ve .NET'i diğer işletim sistemlerine açmaya karar verdi. .NET Core, Mac ve Linux için bir .NET Framework'tür. Bu bir "hafif" .NET Framework, bu nedenle bazı özellikler / kütüphaneler eksik.

Windows'da hala .NET Framework ve Visual Studio 2015 çalıştırıyorum. .NET Core, Node.js , npm, Yeoman , Docker vb.Gibi açık kaynak dünyasıyla daha kolay .

Daha önce mümkün olmayan Visual Studio Code + .NET Core ile Mac veya Linux'ta tam teşekküllü web siteleri ve RESTful API'ler geliştirebilirsiniz. Mac veya Ubuntu'yu seviyorsanız ve bir .NET geliştiricisiyseniz, devam edin ve kurun.

İçin Mono vs .NET Core, Mono artık Microsoft tarafından satın (şirket denir Linux için .NET Framework olarak geliştirilen Xamarin ) ve mobil geliştirme kullandı. Sonunda, Microsoft, Mono'yu .NET Core'a birleştirebilir / taşıyabilir. Şu anda Mono için endişelenmezdim.


12

Bugün Visual Studio 2017'de yeni bir proje oluşturmaya çalışıyordum (yakın zamanda Visual Studio 2015'ten yükseltildi) ve proje türü için yeni seçenekler kümesi fark ettim. Ya yeni ya da yeni bir projeye başladığımdan beri bir süre geçti !! :)

Visual Studio Ekran Görüntüsü

Ben rastladım bu belgeler linke yüzden paylaşıyorum ve çok yararlı buldum. Madde işaretlerinin ayrıntıları da makalede verilmiştir. Ben sadece burada mermi gönderiyorum:

Aşağıdaki durumlarda sunucu uygulamanız için .NET Core kullanmalısınız:

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.

Aşağıdaki durumlarda sunucu uygulamanız için .NET Framework kullanmalısınız:

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.

Bu bağlantı , .NET terimleri sözlüğü sağlar.


11

itibaren Microsoft'un Web sitesi :

.NET Core, .NET Core, ASP.NET Core ve Entity Framework Core gibi çeşitli teknolojileri ifade eder.

Bu teknolojiler, CoreCLR çalışma zamanı ( Evrensel Windows Platformunda .

Sorunuzda belirttiğiniz gibi, .NET Core yalnızca açık kaynaklı değil aynı zamanda taşınabilirdir [MacOS, Windows ve Linux'ta çalışır]

.NET Core'un iç kısımları, uygulama gerektirmedikçe çekirdek kitaplığından farklı modüller kullanmamak için de optimize edilmiştir.


4
".NET Core, .NET Core dahil olmak üzere birçok teknolojiyi ifade eder" ... harika şeyler
Kieren Johnstone

3

Microsoft, .NET Core'un çok geliştirilmiş bir sürümü olan .NET Core v 3.0'ı duyurdu.

Daha fazla ayrıntı için şu harika makaleyi ziyaret edin: Nisan 2019'dan itibaren .NET Framework ve .NET Core arasındaki fark .


3
Yalnızca bağlantı yanıtları ve öncelikle fikir tabanlı yanıtlar kesinlikle önerilmez . Lütfen meta.stackexchange.com/a/8259
çift ​​bip sesi için

Anladım, görüş kısmını düzenledim ... bana bildirdiğiniz için teşekkürler.
itsikha

1
Ne şekilde geliştirildi? En önemli değişikliklerin ve eklemelerin ne olduğunu düşündüğünüzün bir özetini verebilir misiniz?
Peter Mortensen

3

.NET Core, Windows, Linux ve macOS işletim sistemleri için ücretsiz ve açık kaynaklı, yönetilen bir bilgisayar yazılımı çerçevesidir. .NET Framework'ün açık kaynaklı, platformlar arası halefidir.

.NET Core uygulamaları Windows, Linux ve macOS'ta desteklenir. Özetle .NET Core .NET çerçevesine benzer, ancak çapraz platformdur, yani .NET uygulamalarının Windows, Linux ve MacOS üzerinde çalışmasına izin verir. .NET framework uygulamaları yalnızca Windows sisteminde çalışabilir. Dolayısıyla .NET framework ve .NET core arasındaki temel fark .NET Core'un platformlar arası olması ve .NET framework'ün sadece Windows üzerinde çalışmasıdır.

Ayrıca, .NET Core'un Microsoft tarafından yerleşik bağımlılık enjeksiyonu vardır ve bağımlılık enjeksiyonu için üçüncü taraf yazılım / DLL dosyaları kullanmanız gerekmez.


1
Bağımlılık enjeksiyonunu detaylandırabilir misiniz? Bu bağlamda bunun anlamı nedir? Belirli çerçevelerden mi bahsediyorsunuz? Referanslarınız / bağlantılarınız var mı?
Peter Mortensen

1

.NET Core, .NET'in açık kaynaklı ve platformlar arası bir sürümüdür. Microsoft ürünleri, sahip oldukları büyük yeteneklerin yanı sıra, normal kullanıcılar, özellikle .NET teknolojileri tarafından üretilen ürünlerin son kullanıcıları için her zaman pahalıydı.

Düşük seviyedeki müşterilerin çoğu Linux'u işletim sistemi olarak kullanmayı tercih ediyorlar ve .NET Core'dan önce, büyük yeteneklerine rağmen Microsoft teknolojilerini kullanmak istemiyorlar. Ancak .NET Core üretiminden sonra bu sorun tamamen çözüldü ve müşterilerimizi işletim sistemlerini vb. Dikkate almadan tatmin edebiliriz.


Tamamen çözülmedi. Linux'ta bir Windows Forms veya WPF uygulaması kullanmakta zorlanacaksınız .
Peter Mortensen

0

.NET Core, .NET Framework'ün açık kaynaklı ve platformlar arası bir sürümüdür.

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.