.NET Core是"实现" .NET标准?

时间:2017-06-19 19:42:35

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

我仍然对.NET Core和.NET Standard如何相互关联感到困惑。

据我所知,.NET Standard是一个接口定义(与Katana是OWIN的实现方式不同)。 .NET Framework将实现.NET Standard的版本。

到目前为止这是否正确?

.NET Core将其依赖项捆绑在其中。这些依赖项将使用.NET Standard接口的实现。这可能是.NET Framework,Mono或其他东西。

ASP核心是.NET核心与#34; Web"引用的东西。几乎只是一个Visual Studio模板,它可以通过.NET Core控制台应用程序构建。

我还在接近正轨吗?

最后,如果我可以创建一个新的绿色字段应用程序,那么.NET Core应该是受欢迎的技术(假设我不需要任何.NET Framework组件)。

最后一个问题,我可以从.NET Core项目中引用GAC中的.NET Framework程序集吗?

干杯

4 个答案:

答案 0 :(得分:10)

我的理解是.NET Core正在实施.NET Standard

所以.NET Standard更像是规范,而.NET Core是实现该规范的实际框架。

.NET Standard也由其他框架实施,例如.NET FrameworkXamarin(以及构建于ASP.NET Core顶部的.NET Core)。


Here is offficial explanation

  

.NET Standard与.NET Core有何不同?

     

.NET Standard是一个规范,涵盖了.NET平台必须实现的API。

     

.NET Core是一个具体的.NET平台,它实现了.NET标准。


.NET Standard

  

.NET标准是.NET API的正式规范,旨在提供给所有.NET运行时。

     

各种.NET运行时实现了.NET Standard的特定版本。


Introducing .NET Standard

  

.NET Standard是一组所有.NET平台必须实现的API。这统一了.NET平台并防止了未来的碎片化。

     

.NET Standard 2.0将由.NET Framework,.NET Core和Xamarin实现。对于.NET Core,这将添加许多已请求的现有API。


Introducing .NET Core

  

.NET Core本质上是.NET Framework的一个分支

     

另一种看待它的方法:.NET Framework基本上有两个分支。一个分叉由Microsoft提供,仅适用于Windows。另一个分支是Mono,你可以在Linux和Mac上使用它。


有关详细信息,请阅读:

答案 1 :(得分:6)

  1. 是的,.NET Core是一个实现.NET Standard版本的平台/运行时。
  2. 如果您构建一个面向.NET Standard版本的库,则可以在任何实现此版本或更高版本.NET Standard的运行时上使用它。这适用于.NET Core以及mono(=> Xamarin),UWP(.NET Native)和.NET Framework。

    1. 分发的细节并不重要..技术上.NET Core< 2.0依赖NETStandard.Library的构建方式,但2.0版本正在改变。

    2. ASP.NET Core是"只是"在.NET Standard版本(2.0之前版本也是.NET Framework版本)上面的一组库和工具,它需要运行。这意味着您可以为.NET Core和.NET Framework构建ASP.NET Core应用程序 - 如果它们支持所需的.NET Standard级别,甚至可能是其他运行时。

    3. 对于新项目,评估您的需求是有意义的。 .NET Core具有与.NET Framework不同的服务策略,.NET Framework仍然具有不会包含在.NET Core中的组件和API - 例如WinForms和WPF。

      对于新的库项目,尽可能以.NET Standard而非.NET Framework为目标是有意义的,以确保在更多类型的项目中可重用。

答案 2 :(得分:4)

简单回答是

  

.NET Core实现了.NET标准库,因此支持.NET标准库。

ASP.NET Core构建于.NET Core之上。

:这并不意味着所有ASP.NET核心应用程序都支持.NET Standard。 ASP.NET Core应用程序可以在.NET Core或完整的.NET Framework上运行。如果应用程序将完整的.NET Framework作为目标平台,则它可能依赖于库,而不支持.NET Standard。

答案 3 :(得分:3)

其他答案很棒,涵盖如何,但我认为真正理解.NET标准的关键是为什么

.NET Standard实际上是什么?

.NET Standard的目的是允许开发人员编写他们的库和通用代码,然后可以被他们编写的任何应用程序使用,无论使用该代码的应用程序使用哪个平台(网络,桌面,移动,服务等)。

这是必需的,因为.NET已经分叉并演变成多种风格(主要是完整的.NET Framework,.NET Core和Xamarin)。目前,如果您想编写一些封装的代码,例如一些关键业务逻辑,然后在桌面应用程序,移动应用程序和网站中使用该代码,那么很难实现。

写一次,随处运行

.NET标准的想法是,如果您编写代码仅针对.NET Standard中的API,那么它应该适用于安装了.NET版本以实现.NET标准的任何平台。

您不会在.NET Standard中编写整个应用程序,因为您仍然需要平台或.NET版本特定的功能(例如Windows窗体控件库,Xamarin窗体控件,文件系统访问,Web安全性等) ,但如果您编写的库代码目标是.NET Standard,您就会知道它可以在不同平台上的不同应用程序之间轻松共享,并且如果它们安装了.NET标准版本的.NET,它应该可以在这些平台上运行

[“为什么我们需要一个标准?”这篇MSDN博客的一部分由Immo Landewerth撰写] [1]涵盖了这一点。