我仍然对.NET Core和.NET Standard如何相互关联感到困惑 .
据我所知,.NET Standard是一个接口定义(与Katana是OWIN的实现方式不同) . .NET Framework将实现.NET Standard的版本 .
到目前为止这是正确的吗?
.NET Core将其依赖项捆绑在其中 . 这些依赖项将使用.NET Standard接口的实现 . 这可能是.NET Framework,Mono或其他东西 .
ASP Core是.NET Core,引用了“Web”内容 . 几乎只是一个Visual Studio模板,它可以通过.NET Core控制台应用程序构建 .
我还在接近正轨吗?
最后,如果我可以创建一个新的绿色字段应用程序,那么.NET Core应该是受欢迎的技术(假设我不需要任何仅.NET Framework程序集) .
最后一个问题,我可以从.NET Core项目中引用GAC中的.NET Framework程序集吗?
干杯
4 回答
其他答案很棒并且很好地涵盖了技术方面,但我认为理解.NET Standard的关键是知道它实际上是什么;这是允许开发人员编写他们的库和通用代码,使其可以被他们编写的任何应用程序使用,无论使用该代码的应用程序在哪个平台(Web,桌面,移动,服务等) .
这是必需的,因为.NET已经分叉并演变成多种风格(主要是完整的.NET Framework,.NET Core和Xamarin) . 目前,如果您想编写一些封装的代码,例如一些关键业务逻辑,然后在桌面应用程序,移动应用程序和网站中使用该代码,那么很难实现 .
.NET标准的想法是,如果您编写的代码仅针对.NET Standard中的API,那么它应该适用于安装了.NET版本以实现.NET Standard的任何平台 .
您没有在.NET Standard中编写整个应用程序,因为您仍然需要平台或.NET版本特定的功能(例如Windows窗体控件库,Xamarin窗体控件,文件系统访问,Web安全性等),但是如果您编写的库代码以.NET Standard为目标,您将知道它可以在不同平台上的不同应用程序之间轻松共享,并且如果它们安装了.NET标准版本的.NET,它应该可以在这些平台上运行 .
"Why do we need a standard?" section of this MSDN blog by Immo Landewerth很好地涵盖了这一点 .
我的理解是
.NET Core
正在实施.NET Standard
.所以
.NET Standard
更像是一个规范,.NET Core
是一个实现该规范的实际框架 ..NET Standard
也由其他框架实现,如.NET Framework
或Xamarin
(和.NET Core
,它 Build 在.NET Core
的顶部) .Here is offficial explanation:
.NET Standard:
Introducing .NET Standard:
Introducing .NET Core:
有关详细信息,请阅读:
.NET Standard FAQ
.NET Standard(该表列出了.NET Standard的所有版本以及支持的平台)
Introducing .NET Standard
Introducing .NET Core
如果您构建一个面向.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标准版本(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为目标是有意义的,以确保在更多类型的项目中可重用 .
简单的答案是 yes :
ASP.NET Core构建于.NET Core之上 .
But :这并不意味着所有ASP.NET核心应用程序都支持.NET Standard . ASP.NET Core应用程序可以在.NET Core或完整的.NET Framework上运行 . 如果应用程序将完整的.NET Framework作为目标平台,则它可能依赖于库,而不支持.NET Standard .