我读过许多文章,包括this one,但我仍然无法弄清楚它们之间有什么区别,而且它们没有用简单的术语或根本没有解释过。
有人可以澄清.NET SDK和.NET Runtime之间的区别吗?
更新:非常感谢使用比较。类比和简单的英语是非常有教育意义的。
根据.Net Core Guide,.NET Core由以下项目组成
- .NET运行时,提供类型系统,程序集加载,垃圾收集器,本机互操作和其他基本服务。
- 一组框架库,提供原始数据类型,应用程序组合类型和基本实用程序。
- 一组SDK工具和语言编译器,支持.NET Core SDK中提供的基础开发人员体验。
- 'dotnet'应用主机,用于启动.NET Core应用。它选择运行时并托管运行时,提供程序集加载策略并启动应用程序。同样的主机也用于以相同的方式启动SDK工具。
SDK是所有需要/使开发.NET Core应用程序更容易的东西,例如CLI和编译器。
运行时是托管/运行应用程序的“虚拟机”,它抽象了与基本操作系统的所有交互。
运行应用程序只需要后者,但开发应用程序需要前者。
我不是在这里发明任何东西。只需从https://www.microsoft.com/net/download复制粘贴定义
软件开发工具包(SDK)包括使用命令行工具和任何编辑器(包括Visual Studio)构建和运行.NET Core应用程序所需的一切。
运行时仅包含运行现有.NET Core应用程序所需的资源。运行时包含在SDK中。
运行时:运行应用程序
SDK(运行时+工具):构建和运行应用程序
分享Rick Strahl的帖子:Which .NET Core Runtime Download do you need?
运行应用程序只需要.NET Core Runtime,并提供有关安装的信息。
要开发,构建和发布应用程序,需要SDK。
dotnet.exe
安装了运行时安装,但它只提供核心功能来提供运行应用程序的信息并提供有关安装的信息:dotnet mydll.dll
和dotnet --info
。要构建,发布或执行安装SDK所需的任何其他操作。运行以下命令将提供有关安装的信息:
dotnet --info
如果命令失败,则意味着您没有在系统的PATH中安装或提供.NET Core运行时。
以下是该命令的示例输出。
$ 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还会安装运行时。
安装homebrew-cask dotnet会与dotnet-sdk冲突,所以要同时获得运行时和sdk安装dotnet-sdk
brew cask install dotnet-sdk
简而言之,运行时将允许您的操作系统运行已编译的C-Sharp,C#程序,而sdk将允许您编译用C-Sharp,C#编写的程序。
了解您可以安装多个运行时和多个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 Core应用程序编译回v1.0。 IOW,几乎在所有情况下都可以使用最新的SDK。
.NET Core Runtimes
.NET Core Runtimes是最小的自包含和特定组件,包含在特定平台上仅运行.NET Core的绝对最小值。
请注意,运行时安装不包括ASP.NET Core元包运行时依赖项,因此,如果您的应用程序引用Microsoft.AspNetCore.App或Microsoft.AspNetCore.All,则必须单独下载ASP.NET Core包。但是,如果您显式引用所有ASP.NET Core Nuget包而不是使用元包,则这些包将作为应用程序的一部分进行部署,并且只能在运行时运行。
基本上,您要交易安装包大小与运行时预安装要求。
参考文献:
SDK是所有需要/使开发.NET Core应用程序更容易的东西,例如CLI和编译器。
运行时是托管/运行应用程序的“虚拟机”,它抽象了与基本操作系统的所有交互。
SDK通常包括文档和其他帮助文件。运行时仅包含安装的二进制文件。
如果您只安装了.Net Core Runtime,则会添加到stormwild的答案中,您将收到来自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]
当您安装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