首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET标准,.NET核心

.NET标准,.NET核心
EN

Stack Overflow用户
提问于 2016-08-20 05:48:33
回答 4查看 10.3K关注 0票数 47

.NET标准一直是一个令人困惑的概念。标准.NET库格式的想法听起来很棒。但是,还不清楚到底是什么。现在Visual中有.NET核心和.NET标准类库项目模板,以及旧的PCL项目。我还发现,如果您进入该项目的设置,您可以将现有的PCL库切换到.NET标准。还不清楚.NET标准是否是一个库?或者DLL格式。

我要问的基本问题是,我们应该针对哪种类型的图书馆?我主要是为Xamarin项目这样做,但是如果我们能够与其他平台共享这些库,特别是.NET核心和UWP,那就太好了。为什么微软同时推出了两种看似相同的类库类型:.NET Core和.NET标准,这让人感到困惑。

定义

NET一个基于.NET的运行时环境,它符合.NET标准API定义。

PCL -几种运行时环境所支持的基于.NET的库格式,包括.NET、Mono、UWP等。

.NET标准(定义1) -一组基于.NET的运行时环境的标准API定义

.NET标准(定义2) -几种运行时环境支持的基于.NET的库格式,包括.NET、Mono、UWP等,它是PCL格式的延续。在Visual中,通过进入项目属性并编辑目标框架,可以将PCL库转换为.NET标准库。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-26 23:48:03

这是塞缪尔·恩格拉德(https://github.com/dotnet/corefx/issues/973#issuecomment-249582799)的文章:

.NET DLL是根据ECMA-335 (更好地称为公共语言基础结构)格式化的。这种格式在我们称为.NET的所有平台上都是正确的;Full Framework、Core、Xamarin、Mono、Silverlight等等。 您不能使用针对一个平台编译的DLL的原因是该格式没有指定API(一般来说)。因此,虽然它们都可以读取DLL,但如果存在XYZ类,则会遇到一个平台上的名称空间A.B.C中的类和另一个平台上的名称空间D.E.F中的类。 PCLs通过做两件事“解决了”这个问题: 他们使用Type转发,这样即使您编写代码时希望在名称空间A.B.C中使用类XYZ,也可以在其他地方的平台上找到它。它将您可以使用的API限制在所有您想要的平台共享的最低公共集合上。 采用PCL并将其转换为.NET标准项目并不是因为输出格式而重新编译,而是因为包含了元数据(特别是类型转发)。

因此,我认为从本质上说,.NET标准库与PCL库没有什么不同,只是它们在不同的标准化API集的顶部放置了一个层,而这些API可能实现不同的指针(类型转发)。

.NET内核当然是一个运行时环境,但我认为它与.NET标准非常接近。我不认为它与它有任何特殊的关系,只是它实现了.NET标准API。

在我看来,更好的方法是针对一个.NET标准类库,因为它可以跨多个平台兼容.例如,如果以.NET核心为目标,则无法在UWP中引用此程序集类型。您将看到以下内容:

然而,如果您在纯核心环境中工作,您可能会发现有一些特定于.NET核心运行时环境的API,因此有必要直接针对.NET Core。

请参阅本术语表:https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md

票数 9
EN

Stack Overflow用户

发布于 2016-08-23 02:41:29

围绕这一点的文件确实令人困惑,但大致可以理解为:

  • PCL:以一组平台为目标的库(这些平台的API的“最小公分母”)。所以在写PCL的时候,你是说我想把目标对准A,B,C平台
  • .NET标准:一组API的“标准”,而不是一个平台。所以基本上你不关心平台,只是标准版本( 1.3,1.6 .)您的代码将在所有支持它的平台上工作。
  • 这里不要混淆.NET核心,它是.NET框架的“另一个版本”。.NET标准将跨运行时工作(.NET框架、.NET核心、Mono)

因此,我想.NET标准是可行的:)

票数 27
EN

Stack Overflow用户

发布于 2016-08-20 06:21:49

我相信这个资源可以回答你的大部分问题:

https://learn.microsoft.com/en-us/dotnet/articles/standard/library

.NET标准库是.NET API的正式规范,可在所有.NET运行时上使用。标准图书馆背后的动机是在.NET生态系统中建立更大的一致性。

因此,据我所知,其他库类型是特定于平台的,.NET标准在某种程度上与平台无关。

如果您希望您的代码可以在不同的平台上使用,那么.NET标准似乎是理想的,但请密切注意其他平台支持的.NET标准的哪个版本(参见链接中的表)。

希望这能有所帮助

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39050911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档