¿Cuál es la diferencia entre SDK y Runtime en .NET Core?

93

He leído muchos artículos, incluido este , pero todavía no puedo entender cuál es la diferencia, y no lo han explicado ni en términos simples ni en absoluto.

¿Alguien puede aclarar cuál es la diferencia entre .NET SDK y .NET Runtime?

Actualización: Se agradecería mucho el uso de comparaciones. La analogía con el inglés simple es muy educativa.

mohammad rostami siahgeli
fuente

Respuestas:

54

Según la Guía de .Net Core , .NET Core se compone de los siguientes elementos

  • Un tiempo de ejecución .NET, que proporciona un sistema de tipos, carga de ensamblado, un recolector de basura, interoperabilidad nativa y otros servicios básicos.
  • Un conjunto de bibliotecas de marco, que proporcionan tipos de datos primitivos, tipos de composición de aplicaciones y utilidades fundamentales.
  • Un conjunto de compiladores de lenguaje y herramientas del SDK que habilitan la experiencia básica del desarrollador, disponible en .NET Core SDK.
  • El host de la aplicación 'dotnet', que se usa para iniciar aplicaciones .NET Core. Selecciona el tiempo de ejecución y aloja el tiempo de ejecución, proporciona una política de carga de ensamblados e inicia la aplicación. El mismo host también se usa para lanzar herramientas SDK de la misma manera.

El SDK es todo lo que se necesita / facilita el desarrollo de una aplicación .NET Core, como la CLI y un compilador.

El tiempo de ejecución es la "máquina virtual" que aloja / ejecuta la aplicación y abstrae toda la interacción con el sistema operativo base.

Solo se requiere el último para ejecutar la aplicación, pero el primero es necesario para desarrollar la aplicación.

OrdinarioNaranja
fuente
9
¿Significa que el usuario tiene que instalar ambos (SDK + Runtime) para desarrollar la aplicación o significa que el SDK es necesario solo porque también contiene runtime?
Puchacz
5
@Puchacz Acabo de descargar el instalador del SDK y también contenía Core Runtime y Asp.Net Core Runtime.
frakon
1
Eso no tiene sentido. La CLI se invoca para ejecutar un ejecutable "dependiente del marco", por ejemplo, dotnet myapp.dllsi se requiere la CLI para ejecutar una aplicación, ¿cómo diablos no puede ser parte del tiempo de ejecución?
Neutrino
1
Esto tampoco responde si las bibliotecas centrales son parte del tiempo de ejecución o del SDK.
Neutrino
40

Tiempo de ejecución : para ejecutar aplicaciones

SDK (Runtime + Tooling) : para crear y ejecutar aplicaciones

TZU
fuente
2
Tengo una pregunta: antes de ejecutar mi aplicación desde Visual Studio, es necesario compilarla, ¿verdad? Entonces siempre necesitaré un SDK en lugar de solo tiempo de ejecución.
Sameer
2
Los lenguajes compilados deben construirse primero. Independientemente del IDE que utilice, se requiere el SDK para construir el código fuente en una aplicación.
TZU
¿Es el Runtime realmente una parte del SDK o el Runtime recién empaquetado con el SDK como parte del instalador del SDK?
Frank Liu
34

No estoy inventando nada aquí. Simplemente copie y pegue las definiciones de https://www.microsoft.com/net/download

ingrese la descripción de la imagen aquí

El kit de desarrollo de software ( SDK ) incluye todo lo que necesita para crear y ejecutar aplicaciones .NET Core, utilizando herramientas de línea de comandos y cualquier editor (incluido Visual Studio).

El tiempo de ejecución incluye solo los recursos necesarios para ejecutar aplicaciones .NET Core existentes. El tiempo de ejecución está incluido en el SDK.

Artur Karbone
fuente
9

Compartiendo de la publicación de Rick Strahl: ¿Qué descarga en tiempo de ejecución de .NET Core necesita?

Solo se requiere .NET Core Runtime para ejecutar una aplicación y proporciona información sobre la instalación.

Para desarrollar, crear y publicar una aplicación se requiere un SDK.

dotnet.exese instala con una instalación en tiempo de ejecución, pero solo proporciona funciones básicas para proporcionar información para ejecutar una aplicación y proporcionar información sobre la instalación: dotnet mydll.dlly dotnet --info. Para crear, publicar o hacer cualquier otra cosa, necesita instalar el SDK.

La ejecución del siguiente comando proporcionará información sobre la instalación:

dotnet --info

Si el comando falla, significa que no tiene el tiempo de ejecución de .NET Core instalado o disponible en la RUTA del sistema.

A continuación se muestra una salida de muestra del comando.

$ 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 salida te dice:

  • La versión de SDK instalada
  • La versión de tiempo de ejecución activa que ejecuta este comando dotnet
  • Una lista de todos los tiempos de ejecución y SDK instalados

La instalación de un SDK también instala el tiempo de ejecución.


específico de homebrew de macOS

La instalación de homebrew-cask dotnet entrará en conflicto con dotnet-sdk , por lo que para obtener tanto el tiempo de ejecución como el sdk, instale dotnet-sdk

brew cask install dotnet-sdk

En resumen, el tiempo de ejecución permitirá que su sistema operativo ejecute programas compilados en C-Sharp , C # , y el sdk le permitirá compilar programas escritos en C-Sharp , C # .


Es importante comprender que puede tener varios tiempos de ejecución y varios SDK instalados y que cada proyecto puede usar uno diferente. El tiempo de ejecución está determinado por el especificador de tiempo de ejecución de su proyecto en el .csprojarchivo:

<TargetFramework>netcoreapp2.1</TargetFramework>

El SDK es el último SDK instalado globalmente, que es el predeterminado, o puede anular explícitamente el SDK en un archivo global.json ubicado en la carpeta raíz de la solución. Lo siguiente obliga explícitamente a mi proyecto a usar el último RC SDK, en lugar de la versión RTM:

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

En general, no debería ser necesario utilizar una versión de SDK inferior específica, ya que el SDK es compatible con versiones anteriores y puede compilar varias versiones de la aplicación .NET Core a la v1.0. IOW, está bien usar el último SDK en casi todos los casos.

Tiempos de ejecución de .NET Core

Los tiempos de ejecución de .NET Core son el componente autónomo y específico más pequeño y contienen el mínimo absoluto para ejecutar solo .NET Core en una plataforma específica.

Tenga en cuenta que una instalación en tiempo de ejecución no incluye las dependencias en tiempo de ejecución del metapaquete de ASP.NET Core, por lo que si su aplicación hace referencia a Microsoft.AspNetCore.App o Microsoft.AspNetCore.Todo, debe descargar el paquete ASP.NET Core por separado. Sin embargo, si hace referencia explícitamente a todos los paquetes ASP.NET Core Nuget en lugar de usar los metapaquetes, esos paquetes se implementan como parte de su aplicación y se pueden ejecutar solo con el tiempo de ejecución.

Básicamente, está intercambiando el tamaño del paquete de instalación frente a un requisito de preinstalación en tiempo de ejecución.

Referencias:

tormenta salvaje
fuente
¿Por qué Microsoft.AspNetCore.Appaparece en tiempos de ejecución? Pensé que CLR sería un tiempo de ejecución.
Robotron
@Robotron Tienes razón. Solo shared/Microsoft.NETCore.App/<runtime version>son los tiempos de ejecución. El shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>contiene las bibliotecas ASP.NET Core. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild
2

El SDK es todo lo que se necesita / facilita el desarrollo de una aplicación .NET Core, como la CLI y un compilador.

El tiempo de ejecución es la "máquina virtual" que aloja / ejecuta la aplicación y abstrae toda la interacción con el sistema operativo base.

Amir Reza
fuente
2

ingrese la descripción de la imagen aquí

Como resumen: si instala SDK, tendrá todo lo que necesita para desarrollar y ejecutar la aplicación.

Ruhul Amin
fuente
0

El SDK generalmente incluye documentación y otros archivos de ayuda. El tiempo de ejecución contiene solo los archivos binarios para la instalación.

Mårshåll
fuente
2
¿Estás seguro? instala mucho más que eso.
Emil
El SDK contiene las herramientas que ayudan a desarrollar una aplicación principal .net, como los compiladores. Runtime aloja una aplicación principal .net y maneja todas las interacciones con el sistema operativo subyacente.
Syed Waqas
0

agregando a la respuesta de stormwild en caso de que solo tenga instalado .Net Core Runtime, recibirá el siguiente resultado 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
fuente
0

El tiempo de ejecución es suficiente si queremos ejecutar solo la aplicación en el hardware; de ​​lo contrario, para desarrollar y ejecutar necesitamos SDK (que incluye tiempo de ejecución y herramientas).ingrese la descripción de la imagen aquí

usuario2211290
fuente
0

En términos simples, según mi entendimiento y la referencia del artículo https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK: incluye todo lo que necesita, desde la creación de la aplicación .Net Core hasta la creación, ejecución y publicación de las aplicaciones. Esto lo requiere únicamente el entorno de desarrollo, por lo que los desarrolladores pueden desarrollar la aplicación desde cero y compilar, depurar y ejecutar la aplicación.

Tiempo de ejecución: solo tiene los componentes necesarios para ejecutar las aplicaciones .NET Core. Así que esto se puede instalar en el lado del servidor donde implementa la aplicación y no requiere compilaciones ni depuraciones. Requería componentes de hospedaje IIS por separado. En su lugar, puede utilizar Hosting Bundle para Windows.

Karthik
fuente
-1

Cuando instalas SDK, también obtienes tiempo de ejecución en eso. Verifique esto a continuación, esto es lo que se instala cuando instalamos SDK.

Lo siguiente se instaló en C: \ Archivos de programa \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Deepak Singla
fuente