Jaka jest różnica między zestawem SDK a środowiskiem uruchomieniowym w programie .NET Core?


93

Przeczytałem wiele artykułów, w tym ten , ale wciąż nie mogę zrozumieć, jaka jest różnica, a oni nie wyjaśnili tego ani w prostych słowach, ani w ogóle.

Czy ktoś może wyjaśnić, jaka jest różnica między .NET SDK a .NET Runtime?

Aktualizacja: bardzo cenne byłoby korzystanie z porównań. Analogia obok prostego angielskiego jest wysoce edukacyjna.

Odpowiedzi:


54

Zgodnie z przewodnikiem dotyczącym platformy .Net Core , platforma .NET Core składa się z następujących elementów

  • Środowisko uruchomieniowe .NET, które zapewnia system typów, ładowanie zestawu, moduł odśmiecania pamięci, natywną współpracę międzyoperatorską i inne podstawowe usługi.
  • Zestaw bibliotek platformy, które zapewniają prymitywne typy danych, typy kompozycji aplikacji i podstawowe narzędzia.
  • Zestaw narzędzi SDK i kompilatorów języków, które umożliwiają podstawowe środowisko programistyczne, dostępne w zestawie .NET Core SDK.
  • Host aplikacji „dotnet”, który jest używany do uruchamiania aplikacji .NET Core. Wybiera środowisko uruchomieniowe i hostuje środowisko uruchomieniowe, udostępnia zasady ładowania zestawu i uruchamia aplikację. Ten sam host jest również używany do uruchamiania narzędzi SDK w podobny sposób.

Zestaw SDK to wszystko, co jest potrzebne / ułatwia tworzenie aplikacji .NET Core, na przykład interfejs wiersza polecenia i kompilator.

Środowisko wykonawcze jest „maszyną wirtualną”, na której znajduje się / uruchamia aplikację i która usuwa wszystkie interakcje z podstawowym systemem operacyjnym.

Do uruchomienia aplikacji wymagana jest tylko ta ostatnia, ale ta pierwsza jest potrzebna do rozwoju aplikacji.


9
Czy to oznacza, że ​​użytkownik musi zainstalować oba (SDK + Runtime), aby opracować aplikację, czy też oznacza to, że SDK jest wymagany tylko dlatego, że zawiera również środowisko wykonawcze?
Puchacz

5
@Puchacz Właśnie pobrałem instalator SDK i zawierał on także Core Runtime i Asp.Net Core Runtime.
frakon

1
To nie ma dla mnie sensu. CLI jest wywoływany w celu wykonania pliku wykonywalnego „zależnego od struktury”, np. dotnet myapp.dllJeśli CLI jest wymagane do uruchomienia aplikacji, jak u licha nie może być częścią środowiska wykonawczego?
Neutrino

1
To również nie odpowiada, czy podstawowe biblioteki są częścią środowiska uruchomieniowego, czy zestawu SDK.
Neutrino

40

Runtime : do uruchamiania aplikacji

SDK (Runtime + Tooling) : do tworzenia i uruchamiania aplikacji


2
Mam pytanie, czy przed uruchomieniem mojej aplikacji w programie Visual Studio należy ją skompilować, prawda? Wtedy zawsze będę potrzebował SDK, a nie tylko środowiska uruchomieniowego.
Sameer

2
Najpierw należy zbudować języki kompilowane. Niezależnie od używanego IDE, SDK jest wymagany do zbudowania kodu źródłowego w aplikacji.
TZU

Czy środowisko uruchomieniowe rzeczywiście jest częścią zestawu SDK, czy środowisko uruchomieniowe jest po prostu spakowane z zestawem SDK jako częścią instalatora zestawu SDK?
Frank Liu

34

Niczego tu nie wymyślam. Po prostu skopiuj i wklej definicje z https://www.microsoft.com/net/download

wprowadź opis obrazu tutaj

Zestaw do tworzenia oprogramowania ( SDK ) zawiera wszystko, czego potrzebujesz do tworzenia i uruchamiania aplikacji .NET Core przy użyciu narzędzi wiersza poleceń i dowolnego edytora (w tym programu Visual Studio).

Środowisko wykonawcze obejmuje tylko zasoby wymagane do uruchamiania istniejących aplikacji .NET Core. Środowisko wykonawcze jest zawarte w SDK.


9

Udostępnianie z posta Ricka Strahla: Którego pobrania .NET Core Runtime potrzebujesz?

Tylko środowisko uruchomieniowe .NET Core jest wymagane do uruchomienia aplikacji i zawiera informacje o instalacji.

Aby opracować, skompilować i opublikować aplikację, będzie wymagany zestaw SDK.

dotnet.exeinstaluje się z instalacją w środowisku wykonawczym, ale zapewnia tylko podstawowe funkcje, aby zapewnić informacje do uruchomienia aplikacji i informacje o instalacji: dotnet mydll.dlli dotnet --info. Aby tworzyć, publikować lub robić cokolwiek innego, musisz zainstalować pakiet SDK.

Uruchomienie następującego polecenia dostarczy informacji o instalacji:

dotnet --info

Jeśli polecenie nie powiedzie się, oznacza to, że nie masz zainstalowanego lub dostępnego środowiska uruchomieniowego .NET Core w PATH systemu.

Poniżej znajduje się przykładowe wyjście polecenia.

$ 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

Dane wyjściowe mówią:

  • Zainstalowana wersja SDK
  • Wersja aktywnego środowiska uruchomieniowego, w której działa to polecenie dotnet
  • Lista wszystkich zainstalowanych środowisk wykonawczych i zestawów SDK

Zainstalowanie zestawu SDK powoduje również zainstalowanie środowiska wykonawczego.


Specyficzne dla macOS homebrew

Instalowanie dotnet homebrew-cask spowoduje konflikt z dotnet-sdk , aby uzyskać zarówno środowisko uruchomieniowe, jak i pakiet SDK, zainstaluj dotnet-sdk

brew cask install dotnet-sdk

Krótko mówiąc, środowisko wykonawcze pozwoli Twojemu systemowi operacyjnemu uruchamiać skompilowane programy C-Sharp , C # , a sdk pozwoli ci skompilować programy napisane w C-Sharp , C # .


Ważne jest, aby zrozumieć, że możesz mieć wiele środowisk wykonawczych i wiele zainstalowanych zestawów SDK, a każdy projekt może korzystać z innego. Środowisko wykonawcze jest określane przez specyfikator środowiska uruchomieniowego projektu w .csprojpliku:

<TargetFramework>netcoreapp2.1</TargetFramework>

Zestaw SDK to ostatni globalnie zainstalowany zestaw SDK, który jest domyślny, lub można jawnie zastąpić zestaw SDK w pliku global.json umieszczonym w folderze głównym rozwiązania. Poniższe jawnie wymusza na moim projekcie użycie ostatniego zestawu RC SDK zamiast wersji RTM:

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

Ogólnie rzecz biorąc, nie powinno być potrzeby używania określonej niższej wersji zestawu SDK, ponieważ zestaw SDK jest kompatybilny wstecz i może kompilować różne wersje aplikacji .NET Core z powrotem do wersji 1.0. IOW, prawie we wszystkich przypadkach można używać najnowszego zestawu SDK.

Środowiska wykonawcze platformy .NET Core

Środowiska uruchomieniowe .NET Core to najmniejsze samodzielne i określone składniki, które zawierają absolutne minimum niezbędne do uruchomienia tylko platformy .NET Core na określonej platformie.

Należy zauważyć, że instalacja środowiska uruchomieniowego nie obejmuje zależności środowiska uruchomieniowego meta pakietu ASP.NET Core, więc jeśli aplikacja odwołuje się do Microsoft.AspNetCore.App lub Microsoft.AspNetCore.All, musisz osobno pobrać pakiet ASP.NET Core. Jeśli jednak jawnie odwołujesz się do wszystkich pakietów ASP.NET Core Nuget zamiast używać pakietów meta, te pakiety są wdrażane jako część aplikacji i mogą być uruchamiane tylko ze środowiskiem uruchomieniowym.

Zasadniczo wymieniasz rozmiar pakietu instalacyjnego w porównaniu z wymaganiami przed instalacją w środowisku wykonawczym.

Bibliografia:


Dlaczego jest Microsoft.AspNetCore.Appwymieniony w środowisku wykonawczym? Myślałem, że CLR będzie środowiskiem uruchomieniowym?
Robotron

@Robotron Masz rację. Tylko shared/Microsoft.NETCore.App/<runtime version>środowiska wykonawcze. shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>Zawiera biblioteki ASP.NET rdzenia. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild

2

Zestaw SDK to wszystko, co jest potrzebne / ułatwia tworzenie aplikacji .NET Core, na przykład interfejs wiersza polecenia i kompilator.

Środowisko wykonawcze jest „maszyną wirtualną”, na której znajduje się / uruchamia aplikację i która usuwa wszystkie interakcje z podstawowym systemem operacyjnym.


2

wprowadź opis obrazu tutaj

Podsumowując: jeśli zainstalujesz SDK, będziesz mieć wszystko, czego potrzebujesz do programowania i uruchamiania aplikacji.


0

SDK zwykle zawiera dokumentację i inne pliki pomocy. Środowisko wykonawcze zawiera tylko pliki binarne potrzebne do instalacji.


2
Jesteś pewny? instaluje znacznie więcej.
Emil

SDK zawiera narzędzia, które pomagają w tworzeniu podstawowej aplikacji .net, takie jak kompilatory. Środowisko uruchomieniowe obsługuje aplikację .net core i obsługuje wszystkie interakcje z podstawowym systemem operacyjnym.
Syed Waqas

0

dodając do odpowiedzi stormwilda w przypadku, gdy masz zainstalowane tylko środowisko uruchomieniowe .Net Core, otrzymasz następujące dane wyjściowe z 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

Środowisko uruchomieniowe jest wystarczające, jeśli chcemy uruchamiać tylko aplikację na sprzęcie, w przeciwnym razie do tworzenia i uruchamiania potrzebujemy SDK (który obejmuje środowisko wykonawcze i narzędzia).wprowadź opis obrazu tutaj


0

Mówiąc najprościej, zgodnie z moim zrozumieniem i odniesieniem z artykułu https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

NET SDK - obejmuje wszystko, czego potrzebujesz, od tworzenia aplikacji .Net Core po tworzenie, uruchamianie i publikowanie aplikacji. Jest to wymagane wyłącznie przez środowisko programistyczne, więc programiści mogą opracowywać aplikację od podstaw i budować, debugować i uruchamiać aplikację.

Środowisko uruchomieniowe - zawiera tylko składniki wymagane do uruchamiania aplikacji .NET Core. Więc można to zainstalować po stronie serwera, na którym wdrażasz aplikację i nie wymaga to kompilacji ani debugowania. Wymagało to osobnych składników hostingu usług IIS. Zamiast tego możesz użyć pakietu hostingowego dla systemu Windows.


-1

Po zainstalowaniu SDK otrzymujesz również środowisko wykonawcze. Sprawdź to poniżej, to jest instalowane, gdy instalujemy SDK.

Następujące elementy zostały zainstalowane w C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.