我读过很多文章,包括 这个,但是我仍然不知道有什么不同,他们也没有用简单的术语或者根本没有解释。
有人能解释一下.NET SDK 和.NET Runtime 之间的区别吗?
更新: 使用比较将是非常有益的。类比与简单的英语是非常有教育意义的。
SDK 通常包含文档和其他帮助文件,运行时只包含用于安装的二进制文件。
根据 .Net 核心指南,.NET 核心由以下项目组成
NET 运行时,它提供类型系统、程序集加载、垃圾收集器、本机互操作和其他基本服务。 一组框架库,提供原始数据类型、应用程序组合类型和基本实用程序。 一组 SDK 工具和语言编译器,支持基本的开发人员体验,可在.NETCoreSDK 中获得。 “ dotnet”应用程序主机,用于启动。NET 核心应用程序。它选择运行时并承载运行时,提供程序集加载策略并启动应用程序。同样的主机也用于以相同的方式启动 SDK 工具。
SDK 是开发一个。NET 核心应用程序更容易,如 CLI 和编译器。
运行时是承载/运行应用程序并抽象与基本操作系统的所有交互的“虚拟机”。
运行应用程序只需要后者,但开发应用程序需要前者。
我在这里没有发明任何东西。只是复制粘贴从 https://dotnet.microsoft.com/download的定义
软件开发工具包(SDK)包含了构建和运行所需的所有内容。NET 核心应用程序,使用命令行工具和任何编辑器(如 VisualStudio)。 运行时间包含运行.NETCore 应用程序所需的所有内容。
软件开发工具包(SDK)包含了构建和运行所需的所有内容。NET 核心应用程序,使用命令行工具和任何编辑器(如 VisualStudio)。
运行时间包含运行.NETCore 应用程序所需的所有内容。
运行时 : 运行应用程序
SDK (运行时 + 工具) : 构建和运行应用程序
当您安装 SDK 时,您还可以在其中获得运行时。检查下面,这是我们安装 SDK 时安装的。
下面是在 C: Program Files dotnet 上安装的 • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET 核心运行时2.2.0
简而言之: 如果您安装 SDK,您将拥有开发和运行应用程序所需的一切。
来自 Rick Strahl 的文章分享: 您需要哪个.NET 核心运行时下载?
只有.NETCoreRuntime 才需要运行应用程序并提供有关安装的信息。
要开发、构建和发布应用程序,需要一个 SDK。
dotnet.exe安装带有运行时安装,但它只提供 核心功能来向 快跑提供应用程序信息,并提供有关安装的信息: dotnet mydll.dll和 dotnet --info。要构建、发布或执行安装 SDK 所需的任何其他操作。 运行以下命令将提供有关安装的信息: dotnet --info
dotnet.exe安装带有运行时安装,但它只提供 核心功能来向 快跑提供应用程序信息,并提供有关安装的信息: dotnet mydll.dll和 dotnet --info。要构建、发布或执行安装 SDK 所需的任何其他操作。
dotnet.exe
dotnet mydll.dll
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 也会安装运行时。
安装自制木桶 Dotnet将与 Dotnet-sdk发生冲突,因此要同时获得运行时和 Sdk安装 Dotnet-sdk
brew cask install dotnet-sdk
简而言之,运行时间将允许你的操作系统运行编译后的 C-Sharp、 C # 程序,而 Sdk将允许你编译用 C-Sharp、 C # 编写的程序。
了解您可以安装多个运行时和多个 SDK,并且每个项目可以使用不同的运行时和 SDK 非常重要。运行时由 .csproj文件中项目的运行时说明符决定:
.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 包,而不是使用元包,那么这些包将作为应用程序的一部分部署,并且只在运行时运行。 本质上,您是在交易安装包大小与运行时预安装需求。
SDK 是默认的最后一个全局安装的 SDK,或者您可以显式地覆盖位于解决方案根文件夹中的 global.json 中的 SDK。以下内容明确要求我的项目使用最后一个 RC SDK,而不是 RTM 版本:
{ "sdk": { "version": "2.1.300-rc.31211" } }
一般来说,不需要使用特定的低级 SDK 版本,因为 SDK 是向后兼容的,并且可以编译不同版本的。NET 核心应用程序回到 v1.0。IOW,几乎在所有情况下都可以使用最新的 SDK。
那个。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 (包括运行时和工具)。
SDK 需要为特定的目标操作系统/运行时编译源代码并生成字节码/中间语言指令。SDK 与目标操作系统没有紧密耦合。对于安装在 Windows 上的 ex-SDK,可以为 Linux 生成字节码。
Dotnet build ——运行时 ubuntu.18.04-x64
在特定操作系统上运行字节码需要运行时。运行时是特定于操作系统的。Ubuntu 的运行时不同于 Windows。
运行时使.Net 核心与众不同。运行时允许.Net 应用程序像 Java 一样“编写一次,在任何地方运行”。
SDK = = > 用于构建和运行.NET 应用程序
Runtime = = > 运行.NET 应用程序
简单! :)