为什么要针对.NET标准构建许多.NET核心程序集?

时间:2018-12-21 14:08:15

标签: asp.net-core .net-core .net-standard

作为示例,NuGet Microsoft.AspNetCore.Server.Kestral的目标是.NETStandard。我知道这可能是一个实际的选择,因为现在.NET框架/ Xamerin应用程序可以使用此程序包。但是,Microsoft在包装中包含NetCore一词似乎是一个奇怪的选择。

如果我从.NET完整框架Web api引用此程序包,则我的API严格来说是.NET完整框架API,即使它由开放源代码“ .NET核心” Web服务器Kestral提供。

谁知道微软为什么要采用这种命名方式,或者我误解了某些东西?

2 个答案:

答案 0 :(得分:3)

ASP.NET Core与.NET Core不同。 ASP.NET Core也可以在整个框架上运行(当前)。程序包名称是指此名称,而不是.NET Core。

为什么没有软件包可以针对.NET Standard?与仅针对特定子集相比,它将允许更广泛的使用。

答案 1 :(得分:1)

作为Sami Kuhmonen回答的补充:

取自.NET Standard

  

.NET标准是.NET API的正式规范,旨在在所有.NET实现中都可用。 .NET标准背后的动机是在.NET生态系统中建立更大的统一性。 ECMA 335继续为.NET实现行为建立统一性,但是对于.NET库实现的.NET基类库(BCL)没有类似的规范。

     

.NET标准启用以下关键方案:

     
      
  • 为所有.NET实现定义统一的BCL API集,以独立于工作负载实现。
  •   
  • 使开发人员能够使用同一套API来生成可在.NET实现中使用的可移植库。
  •   
  • 减少或什至消除由于.NET API而导致的共享源的有条件编译,仅适用于OS API。
  •   

这意味着任何面向.NET Standard的东西都可以在任何计算机上运行,​​只要它具有实现其针对的标准的框架即可。例如,任何针对.NET Standard 2.0的东西都可以在具有以下任何一个(或更高版本)框架版本的计算机上运行:

  • .NET Core 2
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin iOS 10.14
  • Xamarin Mac 3.8
  • Xamarin Android 8.0
  • 通用Windows平台10.0.16299
  • Unity 2018.1