.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标准库。
发布于 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
发布于 2016-08-23 02:41:29
围绕这一点的文件确实令人困惑,但大致可以理解为:
因此,我想.NET标准是可行的:)
发布于 2016-08-20 06:21:49
我相信这个资源可以回答你的大部分问题:
https://learn.microsoft.com/en-us/dotnet/articles/standard/library
.NET标准库是.NET API的正式规范,可在所有.NET运行时上使用。标准图书馆背后的动机是在.NET生态系统中建立更大的一致性。
因此,据我所知,其他库类型是特定于平台的,.NET标准在某种程度上与平台无关。
如果您希望您的代码可以在不同的平台上使用,那么.NET标准似乎是理想的,但请密切注意其他平台支持的.NET标准的哪个版本(参见链接中的表)。
希望这能有所帮助
https://stackoverflow.com/questions/39050911
复制相似问题