.NET Standard 与 .NET Core [英] .NET Standard vs .NET Core

查看:25
本文介绍了.NET Standard 与 .NET Core的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读过.NET Standard 和.NET Core 的区别,但我真的不知道有什么区别,也不知道什么时候选择.NET Standard 库项目,什么时候选择.NET Core 库项目.

我了解到 .NET Standard 是为了确保一组 API 始终可用,无论使用何种平台(只要该平台与我选择的 .NET Standard 版本兼容).如果我没记错的话,这意味着我可以创建一个 .NET Standard 的类库,然后在任何与我选择的 .NET Standard 版本兼容的平台上使用它.

使用 .NET Core,我了解到它也适用于跨平台使用,因此如果我选择 .NET Core 库,似乎我也可以在许多平台上使用它,就像 .NET Standard.

所以最后,我看不出有什么区别.我什么时候应该使用哪个?它们有什么区别?

解决方案

我会尝试进一步澄清您的疑问并扩展 Jon Skeet 的回答.

.NET Standard 是一个规范,因此为特定 .NET Standard 版本编译的库可用于不同的 .NET Standard 实现.

正如我在其他评论中所说,.NET Standard 和其他 .NET Standard 实现(.NET Core、.NET Framework 等)之间关系的一个很好的类比是

任何面向 NetCore10 的对象都可以访问 INetStandard15 API NetCore10 特定 API(例如DotNetHostPolicy).

当然这个库不能用于不同的 INetStandard15 实现(NetCore10 不能转换为 NetFramework462Mono46>).

如果您只需要访问 INetStandard15 API(并针对该规范而不是具体框架),任何实现它的框架(NetCore10code>、NetFramework462 等)

注意:在原始类比中,David Fowler 将接口用于 .NET Standard 版本和框架实现.我认为,相反,使用接口和类更直观,更能代表规范和具体实现之间的关系.

I have read about the difference between .NET Standard and .NET Core, but I really don't know what the difference is, or when to choose a .NET Standard library project and when to choose a .NET Core library project.

I have read that .NET Standard is to ensure that a set of APIs are always available, no matter the platform used (as long as that platform is compatible with the .NET Standard version that I have chosen). If I'm not mistaken, this means that I can create a class library of .NET Standard and then use it on any platform that is compatible with the .NET Standard version that I have chosen.

With .NET Core, I have read that it is intended for cross-platform use too, so if I choose a .NET Core library it seems that I can use it on many platforms too, just like .NET Standard.

So at the end, I don't see the difference. When should I use which? What is the difference between them?

解决方案

I will try to further clarify your doubts and extend Jon Skeet answer.

.NET Standard is a specification, so a library compiled for a specific .NET Standard version can be used in different .NET Standard implementations.

As said in my other comment, a good analogy for the relationship between .NET Standard and other .NET Standard Implementations (.NET Core, .NET Framework, etc) is this gist by David Fowler: .NET Standard versions are Interfaces, while frameworks are implementations of those interfaces.

This simplified diagram may help to understand this relationship:

Anything targetting NetCore10 has access to INetStandard15 APIs and NetCore10 specific APIs (such as DotNetHostPolicy).

Of course this library cannot be used in different INetStandard15 implementations (NetCore10 is not convertible to NetFramework462 or Mono46).

If you, instead, need access only to INetStandard15 APIs (and target that specification instead of a concrete framework) your library may be used by any framework which implements it (NetCore10, NetFramework462, etc.)

Note: in the original analogy David Fowler used interfaces for both .NET Standard versions and frameworks implementations. I believe that using interfaces and classes is, instead, more intuitive and better represents the relationship between specifications and concrete implementations.

这篇关于.NET Standard 与 .NET Core的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆