.NET Core中的SDK和Runtime有什么区别?


99

我已经阅读了很多文章,包括这篇文章,但是我仍然无法弄清有什么区别,他们也没有以简单的术语或完全没有对它进行解释。

有人可以澄清一下.NET SDK和.NET Runtime有什么区别吗?

更新:使用比较将不胜感激。比喻简单的英语具有很高的教育意义。

Answers:


58

根据.Net Core指南,.NET Core由以下各项组成

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

SDK是所有必需的东西,使开发.NET Core应用程序变得更加容易,例如CLI和编译器。

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

运行应用程序仅需要后者,而开发应用程序则需要前者。


11
这是否意味着用户必须同时安装(SDK + Runtime)才能开发应用程序,还是意味着仅因为SDK也包含运行时才需要SDK?
Puchacz

6
@Puchacz我刚刚下载了SDK安装程序,它还包含Core Runtime和Asp.Net Core Runtime。
frakon

1
这对我来说毫无意义。CLI命令行调用执行一个“框架依赖”可执行例如dotnet myapp.dll,如果需要在命令行运行的应用程序如何在地球上可以把它不能是运行时的一部分?
Neutrino,

1
这也不能回答核心库是运行时还是SDK的一部分。
Neutrino,

43

运行时:运行应用

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


2
我有一个问题,从Visual Studio运行我的应用程序之前,需要先构建它吗?然后,我总是需要一个SDK,而不仅仅是运行时。
tRuEsatm

2
首先需要编译语言。无论使用哪种IDE,都需要SDK才能将源代码构建到应用程序中。
TZU

运行时是否真的是SDK的一部分,还是运行时只是随SDK打包在一起,作为SDK安装程序的一部分?
刘翔


10

Rick Strahl的文章中的分享:您需要哪个.NET Core Runtime下载?

运行应用程序仅需要.NET Core Runtime,并提供有关安装的信息。

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

dotnet.exe使用运行时安装进行安装,但是它仅提供核心功能,以提供运行应用程序的信息以及有关安装的信息:dotnet mydll.dlldotnet --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自制软件

安装自制软件,木桶的dotnet将与冲突DOTNET-SDK,所以要得到双方的运行,和SDK安装DOTNET-SDK

brew cask install dotnet-sdk

简而言之,运行时将允许您的OS运行已编译的C-SharpC#程序,而sdk将允许您编译使用C-SharpC#编写的程序。


重要的是要了解您可以安装多个运行时和多个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是运行时?
Robotron

@Robotron你是对的。只有的shared/Microsoft.NETCore.App/<runtime version>是运行时。在shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>包含了ASP.NET核心库。docs.microsoft.com/en-us/dotnet/core/build/…–
stormwild

2

SDK是所有必需的东西,使开发.NET Core应用程序变得更加容易,例如CLI和编译器。

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



0

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


2
你确定吗?它的安装量远不止于此。
埃米尔(Emil)

SDK包含有助于开发.net核心应用程序的工具,例如编译器。运行时托管.net核心应用程序,并处理与基础OS的所有交互。
Syed Waqas

0

如果仅安装了.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]

0

如果我们只想在硬件上运行应用程序,那么运行时就足够了;否则,要开发和运行,我们需要SDK(包括运行时和工具)。在此处输入图片说明


0

简单来说,根据我的理解以及来自https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/的参考

.NET SDK-这包括从创建.Net Core应用程序到构建,运行和发布应用程序所需的一切。这纯粹是开发环境所需要的,因此开发人员可以从头开始开发应用程序并构建,调试和运行该应用程序。

运行时-仅具有运行.NET Core应用程序所需的组件。因此,可以将其安装在服务器端,在其中部署应用程序,而不需要构建和调试。它需要单独的IIS托管组件。相反,您可以使用Windows Hosting Bundle。


-1

当您安装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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.