Яка різниця між SDK та Runtime у .NET Core?


94

Я прочитав багато статей, включаючи цю , проте я досі не можу зрозуміти, в чому різниця, і вони не пояснили це ні простими словами, ні взагалі.

Хтось може пояснити, яка різниця між .NET SDK та .NET Runtime?

Оновлення: Використання порівнянь було б дуже вдячним. Аналогія поряд із простою англійською мовою має високу освіту.

Відповіді:


55

Згідно з .Net Core Guide , .NET Core складається з таких елементів

  • Середовище виконання .NET, яке забезпечує систему типів, завантаження збірки, збирач сміття, власну взаємодію та інші основні послуги.
  • Набір каркасних бібліотек, які надають примітивні типи даних, типи композицій додатків та основні утиліти.
  • Набір інструментів SDK та мовних компіляторів, що забезпечують базовий досвід розробників, доступний у .NET Core SDK.
  • Хост програми "dotnet", який використовується для запуску програм .NET Core. Він вибирає час виконання та розміщує час виконання, забезпечує політику завантаження збірки та запускає програму. Той самий хост також використовується для запуску інструментів SDK приблизно однаково.

SDK - це все необхідне / полегшує розробку програми .NET Core, наприклад CLI та компілятор.

Час виконання - це "віртуальна машина", яка розміщує / запускає додаток і абстрагує всю взаємодію з базовою операційною системою.

Для запуску програми потрібен лише останній, але перший - для розробки програми.


10
Чи означає це, що користувач повинен встановити обидва (SDK + Runtime) для розробки програми, або це означає, що SDK необхідний лише тому, що він також містить час виконання?
Пухач,

6
@Puchacz Я щойно завантажив інсталятор SDK, і він містив також Core Runtime та Asp.Net Core Runtime.
фракон

1
Для мене це не має сенсу. CLI викликається для виконання виконуваного файлу, "залежного від фреймворку", наприклад, dotnet myapp.dllякщо кліп потрібен для запуску програми, як це може бути не частиною середовища виконання?
Neutrino

1
Це також не дає відповіді, чи є основні бібліотеки частиною середовища виконання або SDK.
Neutrino

41

Час роботи : для запуску програм

SDK (Runtime + Tooling) : для створення та запуску програм


2
У мене запитання: Перш ніж запускати програму з Visual Studio, її потрібно створити правильно? Тоді мені завжди знадобиться SDK, а не просто час виконання.
Самір

2
Спочатку потрібно побудувати компільовані мови. Незалежно від того, яку IDE ви використовуєте, SDK потрібен для вбудови вихідного коду в додаток.
TZU

Чи справді Runtime є частиною SDK, або Runtime просто упакований разом із SDK як частина інсталятора SDK?
Френк Лю

35

Я тут нічого не вигадую. Просто скопіюйте вставки визначень із https://www.microsoft.com/net/download

введіть тут опис зображення

Набір для розробки програмного забезпечення ( SDK ) включає все, що потрібно для створення та запуску програм .NET Core за допомогою інструментів командного рядка та будь-якого редактора (включаючи Visual Studio).

Час виконання включає лише ресурси, необхідні для запуску існуючих програм .NET Core. Час роботи входить до складу SDK.


9

Спільний доступ із допису Ріка Штраля: Яке завантаження .NET Core Runtime Download вам потрібно?

Для запуску програми потрібна лише програма .NET Core Runtime, яка надає інформацію про встановлення.

Для розробки, створення та публікації програми знадобиться SDK.

dotnet.exeвстановлює з інсталяцією під час виконання, але він надає лише основні функції, що надають інформацію про запуск програми та інформацію про встановлення: dotnet mydll.dllта dotnet --info. Щоб створити, опублікувати або зробити щось інше, вам потрібно встановити SDK.

Запуск наступної команди надасть інформацію про встановлення:

dotnet --info

Якщо команда не вдається, це означає, що у вас немає середовища виконання .NET Core, встановленого або доступного в PATH системи.

Нижче наведено зразок виводу команди.

$ 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

Результат повідомляє вам:

  • Встановлена ​​версія SDK
  • Активна версія середовища виконання, на якій запущена ця команда dotnet
  • Список усіх встановлених середовищ виконання та SDK

Встановлення SDK також встановлює час виконання.


macOS для домашнього писемності

Встановлення дотнет-мережі homebrew- cask конфліктуватиме з dotnet-sdk , тому, щоб отримати як час виконання, так і sdk встановити dotnet-sdk

brew cask install dotnet-sdk

Коротше кажучи, час роботи дозволить вашій ОС запускати компільовані програми C-Sharp , C # , а sdk - компілювати програми, написані на C-Sharp , C # .


Важливо розуміти, що у вас може бути встановлено кілька середовищ виконання та кілька SDK, і кожен проект може використовувати інший. Час роботи визначається специфікатором виконання вашого проекту у .csprojфайлі:

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK - це останній глобально встановлений SDK, який є типовим, або ви можете явно перевизначити SDK у глобальному.json, розміщеному в кореневій папці рішення. Далі явно змушує мій проект використовувати останній RC SDK замість версії RTM:

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

Як правило, не повинно виникати необхідності використовувати конкретну нижчу версію SDK, оскільки SDK є зворотно сумісним і може компілювати різні версії .NET Core додатків до версії 1.0. IOW, майже в усіх випадках можна використовувати найновіший пакет SDK.

Час виконання .NET Core

Програми .NET Core - це найменший автономний та специфічний компонент і містять абсолютний мінімум для запуску лише .NET Core на певній платформі.

Зверніть увагу, що встановлення під час виконання не включає залежності середовища виконання метапакета ASP.NET Core, тому, якщо ваша програма посилається на Microsoft.AspNetCore.App або Microsoft.AspNetCore.Все вам доведеться окремо завантажити пакет ASP.NET Core. Однак якщо ви явно посилаєтесь на всі пакети ASP.NET Core Nuget, а не використовуєте метапакети, ці пакети розгортаються як частина вашої програми, і вона може працювати лише під час виконання.

По суті, ви торгуєте розміром інсталяційного пакета проти вимоги до попередньої інсталяції під час виконання.

Список літератури:


Чому Microsoft.AspNetCore.Appвказано в середовищі виконання? Я думав, що CLR буде виконуватися?
Роботрон

@Robotron Ви маєте рацію. Тільки shared/Microsoft.NETCore.App/<runtime version>час роботи. shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>Містить бібліотеки ASP.NET Core. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild

2

SDK - це все необхідне / полегшує розробку програми .NET Core, наприклад CLI та компілятор.

Час виконання - це "віртуальна машина", яка розміщує / запускає додаток і абстрагує всю взаємодію з базовою операційною системою.


2

введіть тут опис зображення

Як підсумок: якщо ви встановите SDK, у вас буде все необхідне для розробки та запуску програми.


0

SDK зазвичай включає документацію та інші файли довідки. Час виконання містить лише двійкові файли для встановлення.


2
ти впевнений? він встановлює набагато більше, ніж це.
Еміль

SDK містить інструменти, які допомагають у розробці основного додатка .net, наприклад компілятори. Runtime розміщує основний додаток .net і обробляє всі взаємодії з базовою ОС.
Syed Waqas 02

0

додаючи відповідь stormwild у випадку, якщо у вас встановлено лише .Net Core Runtime, ви отримаєте наступний вивід з 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

Виконання достатньо, якщо ми хочемо запускати лише додатки на апаратному забезпеченні, інакше для розробки та запуску нам потрібен SDK (що включає час виконання та інструментарій).введіть тут опис зображення


0

Простіше кажучи, відповідно до мого розуміння та посилання зі статті https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK - Сюди входить все, що потрібно від створення додатка .Net Core до створення, запуску та публікації програм. Цього вимагає лише середовище розробки, тому розробники можуть розробляти додаток з нуля та створювати, налагоджувати та запускати додаток.

Час виконання - у ньому є лише компоненти, необхідні для запуску програм .NET Core. ТАК це можна встановити на стороні сервера, де ви розгортаєте програму, і не вимагає збірок та налагоджень. Для цього потрібні компоненти хостингу IIS окремо. Натомість ви можете використовувати Hosting Bundle для Windows.


-1

Коли ви встановлюєте SDK, ви також отримуєте час роботи. Перевірте це нижче, це те, що встановлюється, коли ми встановлюємо SDK.

У C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.