Was ist der Unterschied zwischen SDK und Runtime in .NET Core?

90

Ich habe viele Artikel gelesen, einschließlich dieses , aber ich kann immer noch nicht herausfinden, was der Unterschied ist, und sie haben es weder in einfachen Worten noch überhaupt erklärt.

Kann jemand bitte klären, was der Unterschied zwischen .NET SDK und .NET Runtime ist?

Update: Vergleiche wären sehr willkommen. Analogie neben einfachem Englisch ist sehr lehrreich.

mohammad rostami siahgeli
quelle

Antworten:

52

Gemäß dem .Net Core-Handbuch besteht .NET Core aus den folgenden Elementen

  • Eine .NET-Laufzeit, die ein Typsystem, das Laden von Assemblys, einen Garbage Collector, native Interop- und andere Basisdienste bereitstellt.
  • Eine Reihe von Framework-Bibliotheken, die primitive Datentypen, App-Kompositionstypen und grundlegende Dienstprogramme bereitstellen.
  • Eine Reihe von SDK-Tools und Sprachcompilern, die die Basisentwicklererfahrung ermöglichen und im .NET Core SDK verfügbar sind.
  • Der 'Dotnet'-App-Host, mit dem .NET Core-Apps gestartet werden. Es wählt die Laufzeit aus und hostet die Laufzeit, stellt eine Richtlinie zum Laden von Assemblys bereit und startet die App. Der gleiche Host wird auch verwendet, um SDK-Tools auf die gleiche Weise zu starten.

Das SDK ist alles, was benötigt wird / erleichtert die Entwicklung einer .NET Core-Anwendung, wie z. B. der CLI und eines Compilers.

Die Laufzeit ist die "virtuelle Maschine", die die Anwendung hostet / ausführt und die gesamte Interaktion mit dem Basisbetriebssystem abstrahiert.

Nur Letzteres ist erforderlich, um die Anwendung auszuführen, Ersteres ist jedoch erforderlich, um die Anwendung zu entwickeln.

OrdinaryOrange
quelle
9
Bedeutet dies, dass der Benutzer beide (SDK + Runtime) installieren muss, um eine Anwendung zu entwickeln, oder bedeutet dies, dass das SDK nur erforderlich ist, weil es auch Laufzeit enthält?
Puchacz
5
@Puchacz Ich habe gerade das SDK-Installationsprogramm heruntergeladen und es enthielt auch Core Runtime und Asp.Net Core Runtime.
Frakon
1
Das macht für mich keinen Sinn. Die CLI wird aufgerufen, um eine 'Framework-abhängige' ausführbare Datei auszuführen, z. B. dotnet myapp.dllwenn die CLI zum Ausführen einer App erforderlich ist, wie um alles in der Welt kann sie nicht Teil der Laufzeit sein?
Neutrino
1
Dies beantwortet auch nicht, ob die Kernbibliotheken Teil der Laufzeit oder des SDK sind.
Neutrino
40

Laufzeit : Apps ausführen

SDK (Runtime + Tooling) : Zum Erstellen und Ausführen von Apps

TZU
quelle
2
Ich habe eine Frage: Bevor ich meine App in Visual Studio ausführen kann, muss sie richtig erstellt werden. Dann brauche ich immer ein SDK und nicht nur die Laufzeit.
Sameer
2
Kompilierte Sprachen müssen zuerst erstellt werden. Unabhängig davon, welche IDE Sie verwenden, ist das SDK erforderlich, um den Quellcode in eine Anwendung zu integrieren.
TZU
Ist die Runtime wirklich Teil des SDK oder ist die Runtime nur mit dem SDK als Teil des SDK-Installationsprogramms verpackt?
Frank Liu
33

Ich erfinde hier nichts. Kopieren Sie einfach die Definitionen von https://www.microsoft.com/net/download

Geben Sie hier die Bildbeschreibung ein

Das Software Development Kit ( SDK ) enthält alles, was Sie zum Erstellen und Ausführen von .NET Core-Anwendungen mit Befehlszeilentools und einem beliebigen Editor (einschließlich Visual Studio) benötigen.

Die Laufzeit enthält nur die Ressourcen, die zum Ausführen vorhandener .NET Core-Anwendungen erforderlich sind. Die Laufzeit ist im SDK enthalten.

Artur Karbone
quelle
9

Teilen aus Rick Strahls Beitrag: Welchen .NET Core Runtime Download benötigen Sie?

Zum Ausführen einer Anwendung ist nur die .NET Core Runtime erforderlich, die Informationen zur Installation enthält.

Zum Entwickeln, Erstellen und Veröffentlichen einer Anwendung ist ein SDK erforderlich.

dotnet.exeWird mit einer Laufzeitinstallation installiert, bietet jedoch nur Kernfunktionen , um Informationen zum Ausführen einer Anwendung und Informationen zur Installation bereitzustellen: dotnet mydll.dllund dotnet --info. Um etwas anderes zu erstellen, zu veröffentlichen oder zu tun, müssen Sie das SDK installieren.

Wenn Sie den folgenden Befehl ausführen, erhalten Sie Informationen zur Installation:

dotnet --info

Wenn der Befehl fehlschlägt, ist die .NET Core-Laufzeit nicht im PATH des Systems installiert oder verfügbar.

Unten finden Sie eine Beispielausgabe des Befehls.

$ 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

Die Ausgabe sagt Ihnen:

  • Die installierte SDK-Version
  • Die aktive Laufzeitversion, in der dieser Dotnet-Befehl ausgeführt wird
  • Eine Liste aller installierten Laufzeiten und SDKs

Durch die Installation eines SDK wird auch die Laufzeit installiert.


MacOS Homebrew spezifisch

Die Installation des Homebrew-Cask- Dotnet steht in Konflikt mit dem Dotnet-SDK . Um sowohl die Laufzeit als auch das SDK zu erhalten, installieren Sie Dotnet-SDK

brew cask install dotnet-sdk

Kurz gesagt, die Laufzeit ermöglicht es Ihrem Betriebssystem, kompilierte C-Sharp , C # -Programme auszuführen , und das SDK ermöglicht es Ihnen, in C-Sharp , C # geschriebene Programme zu kompilieren .


Es ist wichtig zu verstehen, dass Sie mehrere Laufzeiten und mehrere SDKs installieren können und jedes Projekt ein anderes verwenden kann. Die Laufzeit wird durch den Laufzeitspezifizierer Ihres Projekts in der .csprojDatei bestimmt:

<TargetFramework>netcoreapp2.1</TargetFramework>

Das SDK ist entweder das letzte global installierte SDK, das die Standardeinstellung ist, oder Sie können das SDK explizit in einer global.json überschreiben, die sich im Stammverzeichnis der Lösung befindet. Das Folgende zwingt mein Projekt ausdrücklich dazu, das letzte RC SDK anstelle der RTM-Version zu verwenden:

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

Im Allgemeinen sollte es nicht erforderlich sein, eine bestimmte niedrigere SDK-Version zu verwenden, da das SDK abwärtskompatibel ist und verschiedene Versionen von .NET Core-Anwendungen auf Version 1.0 kompilieren kann. IOW, es ist in fast allen Fällen in Ordnung, das neueste SDK zu verwenden.

.NET-Kernlaufzeiten

Die .NET Core-Laufzeiten sind die kleinste eigenständige und spezifische Komponente und enthalten das absolute Minimum, um nur .NET Core auf einer bestimmten Plattform auszuführen.

Beachten Sie, dass eine Laufzeitinstallation die Laufzeitabhängigkeiten des ASP.NET Core-Metapakets nicht enthält. Wenn Ihre Anwendung also auf Microsoft.AspNetCore.App oder Microsoft.AspNetCore.All verweist, müssen Sie das ASP.NET Core-Paket separat herunterladen. Wenn Sie jedoch explizit auf alle ASP.NET Core Nuget-Pakete verweisen, anstatt die Metapakete zu verwenden, werden diese Pakete als Teil Ihrer Anwendung bereitgestellt und können nur zur Laufzeit ausgeführt werden.

Im Wesentlichen tauschen Sie die Größe des Installationspakets gegen eine Laufzeitvorinstallationsanforderung.

Verweise:

Stormwild
quelle
Warum ist Microsoft.AspNetCore.Appunter Laufzeiten aufgeführt? Ich dachte, CLR wäre eine Laufzeit?
Robotron
@Robotron Du hast recht. Nur das shared/Microsoft.NETCore.App/<runtime version>sind die Laufzeiten. Das shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>enthält die ASP.NET Core-Bibliotheken. docs.microsoft.com/en-us/dotnet/core/build/…
Stormwild
2

Das SDK ist alles, was benötigt wird / erleichtert die Entwicklung einer .NET Core-Anwendung, wie z. B. der CLI und eines Compilers.

Die Laufzeit ist die "virtuelle Maschine", die die Anwendung hostet / ausführt und die gesamte Interaktion mit dem Basisbetriebssystem abstrahiert.

Amir Reza
quelle
2

Geben Sie hier die Bildbeschreibung ein

Zusammenfassend: Wenn Sie SDK installieren, haben Sie alles, was Sie für die Entwicklung und Ausführung der App benötigen.

Ruhul Amin
quelle
0

Das SDK enthält normalerweise Dokumentation und andere Hilfedateien. Die Laufzeit enthält nur die Binärdateien für die Installation.

Mårshåll
quelle
2
bist du sicher? es installiert viel mehr als das.
Emil
Das SDK enthält die Tools, die bei der Entwicklung einer .net-Kern-App hilfreich sind, z. B. Compiler. Runtime hostet eine .net-Kernanwendung und verwaltet alle Interaktionen mit dem zugrunde liegenden Betriebssystem.
Syed Waqas
0

Wenn Sie die Antwort von Stormwild hinzufügen, falls Sie nur die .Net Core Runtime installiert haben, erhalten Sie die folgende Ausgabe von 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]
Chotkery
quelle
0

Die Laufzeit reicht aus, wenn wir nur eine Anwendung auf Hardware ausführen möchten. Andernfalls benötigen wir zum Entwickeln und Ausführen ein SDK (einschließlich Laufzeit und Tools).Geben Sie hier die Bildbeschreibung ein

user2211290
quelle
0

In einfachen Worten, nach meinem Verständnis und der Referenz aus dem Artikel https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK - Dies umfasst alles, was Sie vom Erstellen einer .NET Core-Anwendung bis zum Erstellen, Ausführen und Veröffentlichen der Anwendungen benötigen. Dies erfordert lediglich die Entwicklungsumgebung, sodass Entwickler die Anwendung von Grund auf neu entwickeln und die Anwendung erstellen, debuggen und ausführen können.

Laufzeit - Dies hat nur die Komponenten, die zum Ausführen der .NET Core-Anwendungen erforderlich sind. Dies kann also auf der Serverseite installiert werden, auf der Sie die Anwendung bereitstellen und keine Builds und Debugs benötigen. IIS-Hosting-Komponenten waren separat erforderlich. Stattdessen können Sie das Hosting Bundle für Windows verwenden.

Karthik
quelle
-1

Wenn Sie SDK installieren, erhalten Sie auch Laufzeit darin. Überprüfen Sie dies unten. Dies wird installiert, wenn wir das SDK installieren.

Folgendes wurde unter C installiert: \ Programme \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Deepak Singla
quelle