我仍然对.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程序集吗?
干杯
答案 0 :(得分:10)
我的理解是.NET Core
正在实施.NET Standard
。
所以.NET Standard
更像是规范,而.NET Core
是实现该规范的实际框架。
.NET Standard
也由其他框架实施,例如.NET Framework
或Xamarin
(以及构建于ASP.NET Core
顶部的.NET Core
)。
Here is offficial explanation:
.NET Standard与.NET Core有何不同?
.NET Standard是一个规范,涵盖了.NET平台必须实现的API。
.NET Core是一个具体的.NET平台,它实现了.NET标准。
.NET标准是.NET API的正式规范,旨在提供给所有.NET运行时。
各种.NET运行时实现了.NET Standard的特定版本。
.NET Standard是一组所有.NET平台必须实现的API。这统一了.NET平台并防止了未来的碎片化。
.NET Standard 2.0将由.NET Framework,.NET Core和Xamarin实现。对于.NET Core,这将添加许多已请求的现有API。
.NET Core本质上是.NET Framework的一个分支
另一种看待它的方法:.NET Framework基本上有两个分支。一个分叉由Microsoft提供,仅适用于Windows。另一个分支是Mono,你可以在Linux和Mac上使用它。
有关详细信息,请阅读:
答案 1 :(得分:6)
如果您构建一个面向.NET Standard版本的库,则可以在任何实现此版本或更高版本.NET Standard的运行时上使用它。这适用于.NET Core以及mono(=> Xamarin),UWP(.NET Native)和.NET Framework。
分发的细节并不重要..技术上.NET Core< 2.0依赖NETStandard.Library
的构建方式,但2.0版本正在改变。
ASP.NET Core是"只是"在.NET Standard版本(2.0之前版本也是.NET Framework版本)上面的一组库和工具,它需要运行。这意味着您可以为.NET Core和.NET Framework构建ASP.NET Core应用程序 - 如果它们支持所需的.NET Standard级别,甚至可能是其他运行时。
对于新项目,评估您的需求是有意义的。 .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已经分叉并演变成多种风格(主要是完整的.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]涵盖了这一点。