.NET Core'da SDK ve Çalışma Zamanı arasındaki fark nedir?


93

Bu da dahil olmak üzere birçok makale okudum , ancak yine de farkın ne olduğunu anlayamıyorum ve ne basit terimlerle ne de hiç açıklamadılar.

Birisi lütfen .NET SDK ile .NET Çalışma Zamanı arasındaki farkın ne olduğunu açıklayabilir mi?

Güncelleme: Karşılaştırmaların kullanılması çok takdir edilecektir. Basit İngilizcenin yanı sıra analoji oldukça eğiticidir.

Yanıtlar:


54

Göre .Net Çekirdek Guide , .NET Çekirdek aşağıdaki öğelerden oluşmaktadır

  • Bir tür sistemi, derleme yüklemesi, çöp toplayıcı, yerel birlikte çalışma 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 ilkesi sağlar ve uygulamayı başlatır. Aynı ana bilgisayar, SDK araçlarını da aynı şekilde başlatmak için kullanılır.

SDK, gereken her şeydir / CLI ve bir derleyici gibi bir .NET Core uygulaması geliştirmeyi kolaylaştırır.

Çalışma zamanı, uygulamayı barındıran / çalıştıran ve temel işletim sistemiyle tüm etkileşimi özetleyen "sanal makinedir".

Uygulamayı çalıştırmak için yalnızca ikincisi gerekir, ancak uygulamayı geliştirmek için ilkine ihtiyaç vardır.


9
Bu, kullanıcının uygulama geliştirmek için her ikisini de (SDK + Runtime) kurması gerektiği anlamına mı geliyor yoksa bu, SDK'nın yalnızca çalışma zamanı da içerdiği için gerekli olduğu anlamına mı geliyor?
Puchacz

5
@Puchacz SDK yükleyicisini yeni indirdim ve ayrıca Core Runtime ve Asp.Net Core Runtime içeriyordu.
frakon

1
Bu bana mantıklı gelmiyor. CLI bir 'bağımlı bir çerçeve' yürütmek için çağrılır yürütülebilir örneğin dotnet myapp.dllcli bir uygulamayı çalıştırmak için gerekli olup olmadığını nasıl yeryüzünde olabilir değil çalışma zamanı parçası olmak?
Neutrino

1
Bu, çekirdek kitaplıkların çalışma zamanının veya SDK'nın parçası olup olmadığını da yanıtlamaz.
Neutrino

40

Çalışma zamanı : uygulamaları çalıştırmak için

SDK (Runtime + Tooling) : uygulamaları oluşturmak ve çalıştırmak için


2
Bir sorum var, Uygulamamı Visual Studio'dan çalıştırmadan önce, doğru oluşturulması gerekiyor mu? O zaman sadece çalışma zamanı yerine her zaman bir SDK'ya ihtiyacım olacak.
Sameer

2
Önce derlenen dillerin oluşturulması gerekir. Hangi IDE'yi kullanırsanız kullanın, SDK, kaynak kodunu bir uygulamaya yerleştirmek için gereklidir.
TZU

Çalışma Zamanı gerçekten SDK'nın bir parçası mı yoksa Çalışma Zamanı, SDK yükleyicisinin bir parçası olarak SDK ile birlikte paketlenmiş mi?
Frank Liu

34

Burada hiçbir şey icat etmiyorum. Sadece tanımları https://www.microsoft.com/net/download adresinden kopyalayıp yapıştırın

görüntü açıklamasını buraya girin

Yazılım geliştirme kiti ( SDK ), komut satırı araçlarını ve herhangi bir düzenleyiciyi (Visual Studio dahil) kullanarak .NET Core uygulamalarını oluşturmak ve çalıştırmak için ihtiyacınız olan her şeyi içerir.

Çalışma zamanı , yalnızca mevcut .NET Core uygulamalarını çalıştırmak için gereken kaynakları içerir. Çalışma zamanı, SDK'ya dahildir.


9

Rick Strahl'ın gönderisinden paylaşım: Hangi .NET Core Runtime İndirmesine ihtiyacınız var?

Bir uygulamayı çalıştırmak için yalnızca .NET Core Runtime gereklidir ve yükleme hakkında bilgi sağlar.

Bir uygulama geliştirmek, oluşturmak ve yayınlamak için bir SDK gerekir.

dotnet.exebir çalışma zamanı yüklemesiyle birlikte yükler, ancak yalnızca bir uygulamayı çalıştırmak için bilgi sağlamak ve yükleme hakkında bilgi sağlamak için temel özellikler sağlar : ve . Derlemek, yayınlamak veya başka herhangi bir şey yapmak için SDK'yı yüklemeniz gerekir.dotnet mydll.dlldotnet --info

Aşağıdaki komutu çalıştırmak, kurulum hakkında bilgi sağlayacaktır:

dotnet --info

Komut başarısız olursa bu, .NET Core çalışma zamanının yüklü olmadığı veya sistemin PATH'inde mevcut olmadığı anlamına gelir.

Aşağıda komutun örnek bir çıktısı bulunmaktadır.

$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.101
 Commit:    236713b0b7

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.13
 OS Platform: Darwin
 RID:         osx.10.13-x64
 Base Path:   /usr/local/share/dotnet/sdk/2.2.101/

Host (useful for support):
  Version: 2.2.0
  Commit:  1249f08fed

.NET Core SDKs installed:
  2.1.4 [/usr/local/share/dotnet/sdk]
  2.1.302 [/usr/local/share/dotnet/sdk]
  2.2.101 [/usr/local/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Çıktı size şunu söyler:

  • Yüklü SDK sürümü
  • Bu dotnet komutunu çalıştıran etkin çalışma zamanı sürümü
  • Yüklü tüm çalışma zamanlarının ve SDK'ların listesi

Bir SDK yüklemek, çalışma zamanını da yükler.


macOS homebrew'e özgü

Homebrew-cask dotnet'i kurmak, dotnet-sdk ile çakışacaktır , bu nedenle hem çalışma zamanını hem de sdk install dotnet-sdk'yi almak için

brew cask install dotnet-sdk

Kısacası, çalışma zamanı , işletim sisteminizin derlenmiş C-Sharp , C # programlarını çalıştırmasına izin verecek ve sdk , C-Sharp , C # ile yazılmış programları derlemenize izin verecektir .


Birden çok çalıştırma zamanınız ve birden çok SDK yükleyebileceğinizi ve her projenin farklı bir tane kullanabileceğini anlamak önemlidir. Çalışma zamanı, projenizin .csprojdosyadaki çalışma zamanı belirticisi tarafından belirlenir :

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK, varsayılan olan en son küresel olarak yüklenmiş SDK'dır veya SDK'yı çözüm kök klasörüne yerleştirilmiş bir global.json dosyasında açıkça geçersiz kılabilirsiniz. Aşağıdakiler, projemi açıkça RTM sürümü yerine son RC SDK'yı kullanmaya zorluyor:

{
 "sdk": {
   "version": "2.1.300-rc.31211"
 }
}

Genel olarak, SDK geriye dönük olarak uyumlu olduğundan ve .NET Core aplikasyonunun çeşitli sürümlerini v1.0'a geri derleyebildiğinden, belirli bir alt SDK sürümünü kullanmaya gerek yoktur. IOW, neredeyse tüm durumlarda en son SDK'yı kullanmakta sorun yok.

.NET Core Runtimes

.NET Core Runtimes, en küçük bağımsız ve özel bileşendir ve belirli bir platformda yalnızca .NET Core çalıştırmak için mutlak minimum değeri içerir.

Bir çalışma zamanı yüklemesinin ASP.NET Core meta paketi çalışma zamanı bağımlılıklarını içermediğini unutmayın, bu nedenle uygulamanız Microsoft.AspNetCore.App veya Microsoft.AspNetCore.All'a başvuruyorsa, ASP.NET Core paketini ayrı olarak indirmeniz gerekir. Ancak, meta paketlerini kullanmak yerine tüm ASP.NET Core Nuget paketlerine açıkça başvurursanız, bu paketler uygulamanızın bir parçası olarak dağıtılır ve yalnızca çalışma zamanıyla çalıştırılabilir.

Esasen, yükleme paketi boyutu ile çalışma zamanı ön yükleme gereksinimiyle ticaret yapıyorsunuz.

Referanslar:


Neden Microsoft.AspNetCore.Appçalışma zamanları altında listeleniyor? CLR'nin bir çalışma zamanı olacağını düşünmüştüm.
Robotron

@Robotron Haklısın. Sadece shared/Microsoft.NETCore.App/<runtime version>çalışma süreleri. shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>ASP.NET Çekirdek kütüphaneleri içerir. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild

2

SDK, gereken her şeydir / CLI ve bir derleyici gibi bir .NET Core uygulaması geliştirmeyi kolaylaştırır.

Çalışma zamanı, uygulamayı barındıran / çalıştıran ve temel işletim sistemiyle tüm etkileşimi özetleyen "sanal makinedir".


2

görüntü açıklamasını buraya girin

Özet olarak: SDK'yı yüklerseniz, uygulamayı geliştirmek ve çalıştırmak için ihtiyacınız olan her şeye sahip olacaksınız.


0

SDK genellikle belgeleri ve diğer yardım dosyalarını içerir. Çalışma zamanı yalnızca kurulum için ikili dosyaları içerir.


2
Emin misiniz? bundan çok daha fazlasını yükler.
Emil

SDK, derleyiciler gibi bir .net çekirdek uygulamasının geliştirilmesine yardımcı olan araçları içerir. Runtime bir .net çekirdek uygulamasını barındırır ve temeldeki işletim sistemiyle tüm etkileşimleri yönetir.
Syed Waqas

0

durumunda stormwild cevabı ekleyerek yalnızca Net Çekirdek Süre Eğer aşağıdaki çıktıyı alırsınız yüklemiş dotnet --info

>PS C:\Users\Administrator> dotnet --info
>
>Host (useful for support):
>  Version: 2.2.3
>  Commit:  6b8ad509b6 
>
>.NET Core SDKs installed:
>  No SDKs were found.
>
>.NET Core runtimes installed:
>  Microsoft.NETCore.App 2.2.3 [C:\Program 
>Files\dotnet\shared\Microsoft.NETCore.App]

0

Yalnızca donanım üzerinde uygulama çalıştırmak istiyorsak çalışma zamanı yeterlidir, aksi takdirde geliştirmek ve çalıştırmak için SDK'ya ihtiyacımız vardır (çalışma zamanı ve araçları içerir).görüntü açıklamasını buraya girin


0

Basit terimlerle, anladığım ve https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/ makalesindeki referansa göre

.NET SDK - Bu, .Net Core uygulaması oluşturmadan uygulamaları oluşturmaya, çalıştırmaya ve yayınlamaya kadar ihtiyacınız olan her şeyi içerir. Bu tamamen geliştirme ortamı gerektirdiğinden, geliştiriciler uygulamayı sıfırdan geliştirebilir ve uygulamayı oluşturabilir, hata ayıklayabilir ve çalıştırabilir.

Çalışma Zamanı - Bu, yalnızca .NET Core uygulamalarını çalıştırmak için gereken bileşenlere sahiptir. Bu, uygulamayı dağıttığınız sunucu tarafında kurulabilir ve derleme ve hata ayıklama gerektirmez. IIS barındırma bileşenlerini ayrı ayrı gerektiriyordu. Bunun yerine Windows için Hosting Bundle'ı kullanabilirsiniz.


-1

SDK'yı yüklediğinizde bunun içinde çalışma zamanı da elde edersiniz. Aşağıdan kontrol edin, SDK'yı kurduğumuzda yüklenen şey budur.

Aşağıdakiler C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0 konumuna yüklendi

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.