在.NETCore 中 SDK 和运行时有什么不同?

我读过很多文章,包括 这个,但是我仍然不知道有什么不同,他们也没有用简单的术语或者根本没有解释。

有人能解释一下.NET SDK 和.NET Runtime 之间的区别吗?

更新: 使用比较将是非常有益的。类比与简单的英语是非常有教育意义的。

76448 次浏览

SDK 通常包含文档和其他帮助文件,运行时只包含用于安装的二进制文件。

根据 .Net 核心指南,.NET 核心由以下项目组成

  • NET 运行时,它提供类型系统、程序集加载、垃圾收集器、本机互操作和其他基本服务。
  • 一组框架库,提供原始数据类型、应用程序组合类型和基本实用程序。
  • 一组 SDK 工具和语言编译器,支持基本的开发人员体验,可在.NETCoreSDK 中获得。
  • “ dotnet”应用程序主机,用于启动。NET 核心应用程序。它选择运行时并承载运行时,提供程序集加载策略并启动应用程序。同样的主机也用于以相同的方式启动 SDK 工具。

SDK 是开发一个。NET 核心应用程序更容易,如 CLI 和编译器。

运行时是承载/运行应用程序并抽象与基本操作系统的所有交互的“虚拟机”。

运行应用程序只需要后者,但开发应用程序需要前者。

我在这里没有发明任何东西。只是复制粘贴从 https://dotnet.microsoft.com/download的定义

enter image description here

软件开发工具包(SDK)包含了构建和运行所需的所有内容。NET 核心应用程序,使用命令行工具和任何编辑器(如 VisualStudio)。

运行时间包含运行.NETCore 应用程序所需的所有内容。

SDK 是开发一个。NET 核心应用程序更容易,如 CLI 和编译器。

运行时是承载/运行应用程序并抽象与基本操作系统的所有交互的“虚拟机”。

运行时 : 运行应用程序

SDK (运行时 + 工具) : 构建和运行应用程序

当您安装 SDK 时,您还可以在其中获得运行时。检查下面,这是我们安装 SDK 时安装的。

下面是在 C: Program Files dotnet 上安装的 • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET 核心运行时2.2.0

enter image description here

简而言之: 如果您安装 SDK,您将拥有开发和运行应用程序所需的一切。

来自 Rick Strahl 的文章分享: 您需要哪个.NET 核心运行时下载?

只有.NETCoreRuntime 才需要运行应用程序并提供有关安装的信息。

要开发、构建和发布应用程序,需要一个 SDK。

dotnet.exe安装带有运行时安装,但它只提供 核心功能来向 快跑提供应用程序信息,并提供有关安装的信息: dotnet mydll.dlldotnet --info。要构建、发布或执行安装 SDK 所需的任何其他操作。

运行以下命令将提供有关安装的信息:

dotnet --info

如果命令失败,则表示您没有。NET 核心运行时在系统的 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 自制的

安装自制木桶 Dotnet将与 Dotnet-sdk发生冲突,因此要同时获得运行时和 Sdk安装 Dotnet-sdk

brew cask install dotnet-sdk

简而言之,运行时间将允许你的操作系统运行编译后的 C-SharpC # 程序,而 Sdk将允许你编译用 C-SharpC # 编写的程序。


了解您可以安装多个运行时和多个 SDK,并且每个项目可以使用不同的运行时和 SDK 非常重要。运行时由 .csproj文件中项目的运行时说明符决定:

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK 是默认的最后一个全局安装的 SDK,或者您可以显式地覆盖位于解决方案根文件夹中的 global.json 中的 SDK。以下内容明确要求我的项目使用最后一个 RC SDK,而不是 RTM 版本:

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

一般来说,不需要使用特定的低级 SDK 版本,因为 SDK 是向后兼容的,并且可以编译不同版本的。NET 核心应用程序回到 v1.0。IOW,几乎在所有情况下都可以使用最新的 SDK。

.NET 核心运行时

那个。NET 核心运行时是最小的自包含的和特定的组件,并包含运行的绝对最小值。NET 核心在特定的平台上。

注意,运行时安装不包括 ASP.NET Core 元包运行时依赖项,所以如果您的应用程序引用 Microsoft。AspNetCore.应用程序或微软。AspNetCore.所有您必须单独下载的 ASP.NET 核心包。但是,如果您显式地引用所有 ASP.NET Core Nuget 包,而不是使用元包,那么这些包将作为应用程序的一部分部署,并且只在运行时运行。

本质上,您是在交易安装包大小与运行时预安装需求。

参考文献:

增加了风暴的答案,如果你只有。安装 NetCoreRuntime 后,您将从 Dotnet ——信息收到以下输出

>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]

如果我们只想在硬件上运行应用程序,运行时就足够了,否则开发和运行我们需要 SDK (包括运行时和工具)。enter image description here

SDK 需要为特定的目标操作系统/运行时编译源代码并生成字节码/中间语言指令。SDK 与目标操作系统没有紧密耦合。对于安装在 Windows 上的 ex-SDK,可以为 Linux 生成字节码。

Dotnet build ——运行时 ubuntu.18.04-x64

在特定操作系统上运行字节码需要运行时。运行时是特定于操作系统的。Ubuntu 的运行时不同于 Windows。

运行时使.Net 核心与众不同。运行时允许.Net 应用程序像 Java 一样“编写一次,在任何地方运行”。

SDK = = > 用于构建和运行.NET 应用程序

Runtime = = > 运行.NET 应用程序

简单! :)