我已经阅读了很多文章,包括这篇文章,但是我仍然无法弄清有什么区别,他们也没有以简单的术语或完全没有对它进行解释。
有人可以澄清一下.NET SDK和.NET Runtime有什么区别吗?
更新:使用比较将不胜感激。比喻简单的英语具有很高的教育意义。
我已经阅读了很多文章,包括这篇文章,但是我仍然无法弄清有什么区别,他们也没有以简单的术语或完全没有对它进行解释。
有人可以澄清一下.NET SDK和.NET Runtime有什么区别吗?
更新:使用比较将不胜感激。比喻简单的英语具有很高的教育意义。
Answers:
根据.Net Core指南,.NET Core由以下各项组成
- .NET运行时,它提供类型系统,程序集加载,垃圾回收器,本机互操作和其他基本服务。
- 一组框架库,提供原始数据类型,应用程序组合类型和基本实用程序。
- .NET Core SDK中提供了一组SDK工具和语言编译器,这些工具和语言编译器可提供基本的开发人员体验。
- “ dotnet”应用程序主机,用于启动.NET Core应用程序。它选择运行时并托管运行时,提供程序集加载策略并启动应用程序。相同的主机也以几乎相同的方式用于启动SDK工具。
SDK是所有必需的东西,使开发.NET Core应用程序变得更加容易,例如CLI和编译器。
运行时是托管/运行应用程序并抽象化与基本操作系统的所有交互的“虚拟机”。
运行应用程序仅需要后者,而开发应用程序则需要前者。
dotnet myapp.dll
,如果需要在命令行运行的应用程序如何在地球上可以把它不能是运行时的一部分?
我在这里没有发明任何东西。只需从https://www.microsoft.com/net/download复制粘贴定义
软件开发工具包(SDK)包括使用命令行工具和任何编辑器(包括Visual Studio)来构建和运行.NET Core应用程序所需的一切。
在运行时只包括运行现有的.NET核心应用所需的资源。运行时包含在SDK中。
Rick Strahl的文章中的分享:您需要哪个.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也会安装运行时。
安装自制软件,木桶的dotnet将与冲突DOTNET-SDK,所以要得到双方的运行,和SDK安装DOTNET-SDK
brew cask install dotnet-sdk
简而言之,运行时将允许您的OS运行已编译的C-Sharp和C#程序,而sdk将允许您编译使用C-Sharp和C#编写的程序。
重要的是要了解您可以安装多个运行时和多个SDK,并且每个项目可以使用一个不同的项目。运行时由项目的运行时说明符在
.csproj
文件中确定:
<TargetFramework>netcoreapp2.1</TargetFramework>
该SDK是默认安装的最后一个全局安装的SDK,或者您可以在解决方案根文件夹中放置的global.json中显式覆盖该SDK。以下内容明确强制我的项目使用最新的RC SDK,而不是RTM版本:
{ "sdk": { "version": "2.1.300-rc.31211" } }
通常,由于SDK向后兼容并且可以将.NET Core applicatino的各种版本重新编译回v1.0,因此无需使用特定的较低SDK版本。IOW,几乎在所有情况下都可以使用最新的SDK。
.NET Core运行时
.NET Core运行时是最小的自包含且特定的组件,并且包含绝对最小值,可以在特定平台上仅运行.NET Core。
请注意,运行时安装不包括ASP.NET Core元包运行时依赖项,因此,如果您的应用程序引用了Microsoft.AspNetCore.App或Microsoft.AspNetCore。所有您都需要单独下载ASP.NET Core包。但是,如果您显式引用所有ASP.NET Core Nuget包而不是使用meta包,则这些包将作为应用程序的一部分进行部署,并且只能在运行时运行。
本质上,您是在权衡安装包大小与运行时预安装要求之间的关系。
参考文献:
Microsoft.AspNetCore.App
在运行时下列出?我以为CLR是运行时?
shared/Microsoft.NETCore.App/<runtime version>
是运行时。在shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>
包含了ASP.NET核心库。docs.microsoft.com/en-us/dotnet/core/build/…–
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]
简单来说,根据我的理解以及来自https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/的参考
.NET SDK-这包括从创建.Net Core应用程序到构建,运行和发布应用程序所需的一切。这纯粹是开发环境所需要的,因此开发人员可以从头开始开发应用程序并构建,调试和运行该应用程序。
运行时-仅具有运行.NET Core应用程序所需的组件。因此,可以将其安装在服务器端,在其中部署应用程序,而不需要构建和调试。它需要单独的IIS托管组件。相反,您可以使用Windows Hosting Bundle。
当您安装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