Какая разница между SDK и Runtime в.NET Core?

Я читал много статей, в том числе и этот, но я пока не могу понять, в чем разница, и они не объяснили это ни в простых терминах, ни вообще.

Может кто-то прояснить, какая разница между.NET SDK и.NET Runtime?

Обновление: использование сравнений было бы очень оценено. Аналогия наряду с простым английским языком является высокообразованной.

Ответы

Ответ 1

Согласно основному руководству.Net Core,.NET Core состоит из следующих элементов:

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

SDK - это все, что необходимо/упрощает разработку приложения.NET Core, такого как CLI и компилятор.

Время выполнения - это "виртуальная машина", которая запускает/запускает приложение и абстрагирует все взаимодействие с базовой операционной системой.

Для запуска приложения требуется только последнее, но первое необходимо для разработки приложения.

Ответ 2

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

enter image description here

Комплект для разработки программного обеспечения (SDK) включает в себя все необходимое для создания и запуска приложений .NET Core с использованием инструментов командной строки и любого редактора (включая Visual Studio).

среда выполнения включает только ресурсы, необходимые для запуска существующих приложений .NET Core. Среда выполнения включена в SDK.

Ответ 3

Время выполнения: запуск приложений

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

Ответ 4

Сообщение от Рика Строла: Какая загрузка .NET Core Runtime вам нужна?

Только .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 будет конфликтовать с dotnet-sdk, поэтому для получения как среды выполнения, так и sdk установите dotnet-sdk

brew cask install dotnet-sdk

Короче говоря, среда выполнения позволит вашей ОС запускать скомпилированные программы C-Sharp, С#, а SDK позволит вам компилировать программы, написанные на C-Sharp, С#.


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

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK является либо последним глобально установленным SDK, который используется по умолчанию, либо вы можете явно переопределить SDK в файле global.json, расположенном в корневой папке решения. Следующее явно вынуждает мой проект использовать последний RC SDK вместо версии RTM:

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

Как правило, не нужно использовать определенную более низкую версию SDK, поскольку SDK обратно совместим и может компилировать различные версии приложения .NET Core до версии 1.0. Я могу использовать последнюю версию SDK практически во всех случаях.

.NET Core Runtime

.NET Core Runtime - это самый маленький автономный и специфический компонент, содержащий абсолютный минимум для запуска только .NET Core на конкретной платформе.

Обратите внимание, что установка во время выполнения не включает зависимости времени выполнения метапакета ASP.NET Core, поэтому, если ваше приложение ссылается на Microsoft.AspNetCore.App или Microsoft.AspNetCore.All, вам необходимо отдельно загрузить пакет ASP.NET Core. Однако, если вы явно ссылаетесь на все пакеты ASP.NET Core Nuget, а не используете мета-пакеты, эти пакеты развертываются как часть вашего приложения, и он может работать только во время выполнения.

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

Рекомендации:

Ответ 5

enter image description here

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

Ответ 6

SDK - это все, что необходимо/упрощает разработку приложения.NET Core, такого как CLI и компилятор.

Время выполнения - это "виртуальная машина", которая содержит/запускает приложение и абстрагирует все взаимодействие с базовой операционной системой.

Ответ 7

SDK обычно включает документацию и другие файлы справки. Время выполнения содержит только двоичные файлы для установки.

Ответ 8

добавив ответ на 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]

Ответ 9

Когда вы устанавливаете 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