Qual é a diferença entre SDK e Runtime no .NET Core?

99

Eu li muitos artigos, incluindo este , mas ainda não consigo descobrir qual é a diferença, e eles não explicaram em termos simples ou de forma alguma.

Alguém pode esclarecer qual é a diferença entre .NET SDK e .NET Runtime?

Atualização: Usar comparações seria muito apreciado. A analogia com o inglês simples é altamente educacional.

Mohammad Rostami Siahgeli
fonte

Respostas:

58

De acordo com o Guia do .Net Core , o .NET Core é composto dos seguintes itens

  • Um runtime .NET, que fornece um sistema de tipos, carregamento de montagem, um coletor de lixo, interoperabilidade nativa e outros serviços básicos.
  • Um conjunto de bibliotecas de framework, que fornecem tipos de dados primitivos, tipos de composição de aplicativos e utilitários fundamentais.
  • Um conjunto de ferramentas SDK e compiladores de linguagem que permitem a experiência básica do desenvolvedor, disponível no .NET Core SDK.
  • O host de aplicativo 'dotnet', que é usado para iniciar aplicativos .NET Core. Ele seleciona o tempo de execução e hospeda o tempo de execução, fornece uma política de carregamento de montagem e inicia o aplicativo. O mesmo host também é usado para iniciar ferramentas SDK da mesma maneira.

O SDK é tudo o que é necessário / torna o desenvolvimento de um aplicativo .NET Core mais fácil, como a CLI e um compilador.

O tempo de execução é a "máquina virtual" que hospeda / executa o aplicativo e abstrai toda a interação com o sistema operacional de base.

Apenas o último é necessário para executar o aplicativo, mas o primeiro é necessário para desenvolver o aplicativo.

OrdinaryOrange
fonte
11
Isso significa que o usuário deve instalar ambos (SDK + Runtime) para desenvolver o aplicativo ou significa que o SDK é necessário apenas porque também contém o tempo de execução?
Puchacz
6
@Puchacz Acabei de baixar o instalador do SDK e ele continha também Core Runtime e Asp.Net Core Runtime.
frakon
1
Isso não faz sentido para mim. O CLI é chamado para executar um executável 'dependente do framework', por exemplo, dotnet myapp.dllse o cli é necessário para executar um aplicativo, como ele pode não fazer parte do tempo de execução?
Neutrino
1
Isso também não responde se as bibliotecas principais fazem parte do tempo de execução ou do SDK.
Neutrino
43

Tempo de execução : para executar aplicativos

SDK (Runtime + Tooling) : para construir e executar aplicativos

TZU
fonte
2
Eu tenho uma pergunta, antes de executar meu aplicativo no Visual Studio, ele precisa ser compilado certo? Então, sempre precisarei de um SDK, em vez de apenas o tempo de execução.
tRuEsatm
2
Linguagens compiladas precisam ser construídas primeiro. Não importa qual IDE você use, o SDK é necessário para construir o código-fonte em um aplicativo.
TZU
O Runtime é realmente uma parte do SDK ou o Runtime apenas fornecido com o SDK como parte do instalador do SDK?
Frank Liu de
39

Não estou inventando nada aqui. Basta copiar e colar as definições de https://www.microsoft.com/net/download

insira a descrição da imagem aqui

O kit de desenvolvimento de software ( SDK ) inclui tudo que você precisa para construir e executar aplicativos .NET Core, usando ferramentas de linha de comando e qualquer editor (incluindo Visual Studio).

O tempo de execução inclui apenas os recursos necessários para executar os aplicativos .NET Core existentes. O tempo de execução está incluído no SDK.

Artur Karbone
fonte
10

Compartilhamento da postagem de Rick Strahl: Qual download do .NET Core Runtime você precisa?

Apenas o .NET Core Runtime é necessário para executar um aplicativo e fornece informações sobre a instalação.

Para desenvolver, construir e publicar um aplicativo, é necessário um SDK.

dotnet.exeé instalado com uma instalação em tempo de execução, mas fornece apenas recursos básicos para fornecer informações para executar um aplicativo e fornecer informações sobre a instalação: dotnet mydll.dlle dotnet --info. Para construir, publicar ou fazer qualquer outra coisa, você precisa instalar o SDK.

Executar o seguinte comando fornecerá informações sobre a instalação:

dotnet --info

Se o comando falhar, significa que você não tem o tempo de execução do .NET Core instalado ou disponível no PATH do sistema.

Abaixo está um exemplo de saída do 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

A saída diz a você:

  • A versão instalada do SDK
  • A versão de tempo de execução ativa que está executando este comando dotnet
  • Uma lista de todos os runtimes e SDKs instalados

A instalação de um SDK também instala o tempo de execução.


MacOS homebrew específico

A instalação do dotnet homebrew-cask entrará em conflito com o dotnet-sdk , para obter o tempo de execução e o sdk instale o dotnet-sdk

brew cask install dotnet-sdk

Resumindo, o tempo de execução permitirá que seu sistema operacional execute programas C-Sharp , C # compilados , e o sdk permitirá que você compile programas escritos em C-Sharp , C # .


É importante entender que você pode ter vários tempos de execução e vários SDKs instalados e cada projeto pode usar um diferente. O tempo de execução é determinado pelo especificador de tempo de execução do seu projeto no .csprojarquivo:

<TargetFramework>netcoreapp2.1</TargetFramework>

O SDK é o último SDK instalado globalmente, que é o padrão, ou você pode substituir explicitamente o SDK em um global.json colocado na pasta raiz da solução. O seguinte força explicitamente meu projeto a usar o último RC SDK, em vez da versão RTM:

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

Geralmente, não deve haver necessidade de usar uma versão inferior específica do SDK, pois o SDK é compatível com versões anteriores e pode compilar várias versões do aplicativo .NET Core até a v1.0. IOW, não há problema em usar o SDK mais recente em quase todos os casos.

Tempos de execução do .NET Core

Os tempos de execução do .NET Core são o menor componente autocontido e específico e contêm o mínimo absoluto para executar apenas o .NET Core em uma plataforma específica.

Observe que uma instalação em tempo de execução não inclui as dependências de tempo de execução do metapacote ASP.NET Core, portanto, se seu aplicativo fizer referência a Microsoft.AspNetCore.App ou Microsoft.AspNetCore.All, você terá que baixar separadamente o pacote ASP.NET Core. No entanto, se você referenciar explicitamente todos os pacotes ASP.NET Core Nuget em vez de usar os metapacotes, esses pacotes serão implantados como parte do seu aplicativo e poderão ser executados apenas com o tempo de execução.

Essencialmente, você está trocando o tamanho do pacote de instalação por um requisito de pré-instalação em tempo de execução.

Referências:

Stormwild
fonte
Por que está Microsoft.AspNetCore.Applistado em tempos de execução? Achei que CLR seria um runtime?
Robotron
@Robotron Você está certo. Apenas shared/Microsoft.NETCore.App/<runtime version>são os tempos de execução. O shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>contém as bibliotecas ASP.NET Core. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild
2

O SDK é tudo o que é necessário / torna o desenvolvimento de um aplicativo .NET Core mais fácil, como a CLI e um compilador.

O tempo de execução é a "máquina virtual" que hospeda / executa o aplicativo e abstrai toda a interação com o sistema operacional de base.

Amir Reza
fonte
2

insira a descrição da imagem aqui

Como resumo: Se você instalar o SDK, terá tudo o que precisa para desenvolver e executar o aplicativo.

Ruhul Amin
fonte
0

O SDK geralmente inclui documentação e outros arquivos de ajuda. O tempo de execução contém apenas os arquivos binários para a instalação.

Mårshåll
fonte
2
você tem certeza? ele instala muito mais do que isso.
Emil
SDK contém as ferramentas que ajudam no desenvolvimento de um aplicativo principal .net, como compiladores. O tempo de execução hospeda um aplicativo principal .net e lida com todas as interações com o sistema operacional subjacente.
Syed Waqas,
0

adicionando à resposta de stormwild no caso de você ter apenas o .Net Core Runtime instalado, você receberá a seguinte saída 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
fonte
0

O tempo de execução é suficiente se quisermos executar apenas o aplicativo no hardware, caso contrário, para desenvolver e executar precisamos do SDK (que inclui o tempo de execução e ferramentas).insira a descrição da imagem aqui

user2211290
fonte
0

Em termos simples, de acordo com meu entendimento e a referência do artigo https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK - inclui tudo o que você precisa, desde a criação de aplicativos .Net Core até a construção, execução e publicação dos aplicativos. Isso requer puramente pelo ambiente de desenvolvimento, para que os desenvolvedores possam desenvolver o aplicativo do zero e construir, depurar e executar o aplicativo.

Tempo de execução - contém apenas os componentes necessários para executar os aplicativos .NET Core. Portanto, isso pode ser instalado no lado do servidor onde você implanta o aplicativo e não requer compilações e depurações. Ele exigia componentes de hospedagem IIS separadamente. Em vez disso, você pode usar o Hosting Bundle para Windows.

Karthik
fonte
-1

Quando você instala o SDK, também obtém tempo de execução. Verifique isso abaixo, é isso que é instalado quando instalamos o SDK.

Os seguintes itens foram instalados em C: \ Arquivos de programas \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Deepak Singla
fonte