Quelle est la différence entre SDK et Runtime dans .NET Core?

93

J'ai lu de nombreux articles, y compris celui-ci , mais je ne peux toujours pas comprendre quelle est la différence, et ils ne l'ont pas expliqué en termes simples ou du tout.

Quelqu'un peut-il clarifier quelle est la différence entre .NET SDK et .NET Runtime?

Mise à jour: l'utilisation de comparaisons serait très appréciée. L'analogie avec l'anglais simple est hautement éducative.

mohammad rostami siahgeli
la source

Réponses:

54

Selon le .Net Core Guide , .NET Core est composé des éléments suivants

  • Un runtime .NET, qui fournit un système de type, le chargement d'assembly, un garbage collector, une interopérabilité native et d'autres services de base.
  • Un ensemble de bibliothèques de framework, qui fournissent des types de données primitifs, des types de composition d'application et des utilitaires fondamentaux.
  • Ensemble d'outils du SDK et de compilateurs de langage qui permettent l'expérience de développement de base, disponible dans le SDK .NET Core.
  • L'hôte d'application «dotnet», utilisé pour lancer les applications .NET Core. Il sélectionne le runtime et héberge le runtime, fournit une politique de chargement d'assembly et lance l'application. Le même hôte est également utilisé pour lancer les outils SDK de la même manière.

Le SDK est tout ce qui est nécessaire / facilite le développement d'une application .NET Core, comme la CLI et un compilateur.

Le runtime est la "machine virtuelle" qui héberge / exécute l'application et résume toute l'interaction avec le système d'exploitation de base.

Seul ce dernier est nécessaire pour exécuter l'application, mais le premier est nécessaire pour développer l'application.

OrdinaireOrange
la source
9
Cela signifie-t-il que l'utilisateur doit installer les deux (SDK + Runtime) pour développer l'application ou cela signifie que le SDK est requis uniquement parce qu'il contient également le runtime?
Puchacz
5
@Puchacz Je viens de télécharger le programme d'installation du SDK et il contenait également Core Runtime et Asp.Net Core Runtime.
frakon
1
Cela n'a aucun sens pour moi. L'interface de ligne de commande est appelée pour exécuter un exécutable «dépendant du cadre», par exemple dotnet myapp.dllsi le cli est requis pour exécuter une application, comment diable ne peut-il pas faire partie du runtime?
Neutrino
1
Cela ne répond pas non plus si les bibliothèques principales font partie du runtime ou du SDK.
Neutrino
40

Runtime : pour exécuter des applications

SDK (Runtime + Tooling) : pour créer et exécuter des applications

TZU
la source
2
J'ai une question, avant d'exécuter mon application à partir de Visual Studio, elle doit être créée, n'est-ce pas? Ensuite, j'aurai toujours besoin d'un SDK plutôt que d'un simple runtime.
Sameer
2
Les langages compilés doivent être construits en premier. Quel que soit l'IDE que vous utilisez, le SDK est nécessaire pour créer le code source dans une application.
TZU
Le Runtime fait-il vraiment partie du SDK ou le Runtime est-il simplement fourni avec le SDK dans le cadre du programme d'installation du SDK?
Frank Liu
34

Je n'invente rien ici. Copiez-collez simplement les définitions de https://www.microsoft.com/net/download

entrez la description de l'image ici

Le kit de développement logiciel ( SDK ) comprend tout ce dont vous avez besoin pour créer et exécuter des applications .NET Core, à l'aide d'outils de ligne de commande et de n'importe quel éditeur (y compris Visual Studio).

Le runtime inclut uniquement les ressources requises pour exécuter les applications .NET Core existantes. Le runtime est inclus dans le SDK.

Artur Karbone
la source
9

Partage du post de Rick Strahl: De quel téléchargement .NET Core Runtime avez-vous besoin?

Seul le .NET Core Runtime est requis pour exécuter une application et fournit des informations sur l'installation.

Pour développer, créer et publier une application, il faudra un SDK.

dotnet.exeavec un moteur d' exécution installations d' installation, mais il ne fournit que des caractéristiques essentielles pour fournir des informations pour exécuter une application et fournir des informations sur l'installation: dotnet mydll.dllet dotnet --info. Pour créer, publier ou faire quoi que ce soit d'autre, vous devez installer le SDK.

L'exécution de la commande suivante fournira des informations sur l'installation:

dotnet --info

Si la commande échoue, cela signifie que vous n'avez pas le runtime .NET Core installé ou disponible dans le PATH du système.

Voici un exemple de sortie de la commande.

$ 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

La sortie vous indique:

  • La version du SDK installée
  • La version d'exécution active qui exécute cette commande dotnet
  • Une liste de tous les runtimes et SDK installés

L'installation d'un SDK installe également le runtime.


spécifique à macOS homebrew

L'installation du dotnet homebrew-cask sera en conflit avec le dotnet-sdk , donc pour obtenir à la fois le runtime et le sdk install dotnet-sdk

brew cask install dotnet-sdk

En bref, le runtime permettra à votre système d'exploitation d'exécuter des programmes compilés C-Sharp , C # , et le sdk vous permettra de compiler des programmes écrits en C-Sharp , C # .


Il est important de comprendre que vous pouvez avoir plusieurs environnements d'exécution et plusieurs SDK installés et que chaque projet peut en utiliser un différent. Le runtime est déterminé par le spécificateur d'exécution de votre projet dans le .csprojfichier:

<TargetFramework>netcoreapp2.1</TargetFramework>

Le SDK est soit le dernier SDK installé globalement qui est la valeur par défaut, soit vous pouvez remplacer explicitement le SDK dans un global.json placé dans le dossier racine de la solution. Ce qui suit force explicitement mon projet à utiliser le dernier SDK RC, au lieu de la version RTM:

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

En règle générale, il ne devrait pas être nécessaire d'utiliser une version inférieure spécifique du SDK car le SDK est rétrocompatible et peut compiler diverses versions de .NET Core applicatino vers la v1.0. IOW, vous pouvez utiliser le dernier SDK dans presque tous les cas.

Runtimes .NET Core

Les Runtimes .NET Core sont le plus petit composant autonome et spécifique et contiennent le minimum absolu pour exécuter uniquement .NET Core sur une plate-forme spécifique.

Notez qu'une installation d'exécution n'inclut pas les dépendances d'exécution du méta-package ASP.NET Core, donc si votre application fait référence à Microsoft.AspNetCore.App ou Microsoft.AspNetCore, vous devez télécharger séparément le package ASP.NET Core. Toutefois, si vous référencez explicitement tous les packages ASP.NET Core Nuget plutôt que d'utiliser les méta packages, ces packages sont déployés dans le cadre de votre application et peuvent s'exécuter uniquement avec le runtime.

Essentiellement, vous négociez la taille du package d'installation par rapport à une exigence de pré-installation d'exécution.

Références:

Stormwild
la source
Pourquoi est Microsoft.AspNetCore.Apprépertorié sous runtimes? Je pensais que CLR serait un runtime?
Robotron
@Robotron Vous avez raison. Seuls shared/Microsoft.NETCore.App/<runtime version>sont les runtimes. Le shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>contient les bibliothèques ASP.NET Core. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild
2

Le SDK est tout ce qui est nécessaire / facilite le développement d'une application .NET Core, comme la CLI et un compilateur.

Le runtime est la "machine virtuelle" qui héberge / exécute l'application et résume toute l'interaction avec le système d'exploitation de base.

Amir Reza
la source
2

entrez la description de l'image ici

En résumé: si vous installez le SDK, vous aurez tout ce dont vous avez besoin pour le développement et l'exécution de l'application.

Ruhul Amin
la source
0

Le SDK comprend généralement de la documentation et d'autres fichiers d'aide. Le runtime contient uniquement les fichiers binaires pour l'installation.

Mårshåll
la source
2
êtes-vous sûr? il installe bien plus que ça.
Emil
Le SDK contient les outils qui aident à développer une application principale .net, tels que des compilateurs. Runtime héberge une application principale .net et gère toutes les interactions avec le système d'exploitation sous-jacent.
Syed Waqas
0

en ajoutant à la réponse de stormwild au cas où vous n'avez installé que le .Net Core Runtime, vous recevrez la sortie suivante de 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
la source
0

L'exécution est suffisante si nous voulons exécuter uniquement une application sur du matériel, sinon pour développer et exécuter, nous avons besoin du SDK (qui comprend l'exécution et les outils).entrez la description de l'image ici

user2211290
la source
0

En termes simples, selon ma compréhension et la référence de l'article https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK - Cela comprend tout ce dont vous avez besoin, de la création de l'application .Net Core à la création, l'exécution et la publication des applications. Cela nécessite purement l'environnement de développement, afin que les développeurs puissent développer l'application à partir de zéro et construire, déboguer et exécuter l'application.

Runtime - Cela n'a que les composants nécessaires pour exécuter les applications .NET Core. Ainsi, cela peut être installé côté serveur où vous déployez l'application et ne nécessite pas de builds et de débogages. Il nécessitait des composants d'hébergement IIS séparément. Au lieu de cela, vous pouvez utiliser Hosting Bundle pour Windows.

Karthik
la source
-1

Lorsque vous installez SDK, vous obtenez également le temps d'exécution. Vérifiez ceci ci-dessous, c'est ce qui est installé lorsque nous installons le SDK.

Les éléments suivants ont été installés sur C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Deepak Singla
la source