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

时间:2017-12-09 20:45:47

标签: sdk .net-core runtime

我已经阅读了很多文章,包括this one,但我仍然无法弄清楚它们之间的区别,并且他们没有用简单的术语或根本没有解释过它。

有人可以澄清一下.NET SDK和.NET Runtime之间的区别吗?

更新:非常感谢使用比较。与简单的英语类比,具有高度的教育性。

11 个答案:

答案 0 :(得分:31)

根据.Net Core Guide,.NET Core由以下项目组成

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

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

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

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

答案 1 :(得分:17)

我这里没有发明任何东西。只需复制https://www.microsoft.com/net/download

中的定义

enter image description here

软件开发工具包( SDK )包括使用命令行工具和任何编辑器(包括Visual Studio)构建和运行.NET Core应用程序所需的一切。

运行时仅包含运行现有.NET Core应用程序所需的资源。运行时包含在SDK中。

答案 2 :(得分:12)

运行时:运行应用

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

答案 3 :(得分:8)

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也会安装运行时。


特定于macOS自制软件

安装自酿桶 dotnet 将与 dotnet-sdk 冲突,因此要获得运行时和 sdk 安装< strong> dotnet-sdk

brew cask install dotnet-sdk

简而言之,运行时将允许您的操作系统运行已编译的 C-Sharp C#程序和 sdk < / strong>允许您编译用 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程序包,则这些程序包将作为应用程序的一部分进行部署,并且只能在运行时运行。

     

本质上,您是在交换安装软件包的大小,而不是运行时的预安装要求。

参考文献:

答案 4 :(得分:2)

enter image description here

摘要: 如果安装SDK,则将拥有开发和运行应用程序所需的一切。

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分: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]

答案 8 :(得分:0)

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

答案 9 :(得分:0)

按照我的理解和https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/文章中的引用

,简而言之

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

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

答案 10 :(得分:-1)

在安装SDK时,您还将获得运行时。请在下面进行检查,这是我们安装SDK时要安装的内容。

以下文件安装在C:\ Program Files \ dotnet中     •.NET Core SDK 2.2.100     •.NET Core运行时2.2.0     •ASP.NET Core Runtime 2.2.0