我对所有关于.Net Standard的讨论感到困惑。从某种意义上说,标准.NET库的想法听起来很棒。我注意到在NuGet库中,您可以为许多平台选择.NET Standard(例如Silverlight)。但这让我感到困惑。 .NET标准是一个库吗?还是DLL格式?
无论如何,现在有.NET Core项目,以及旧的PCL项目,但我没有看到.NET Standard的任何Visual Studio模板。虽然,我确实发现如果你进入项目的设置,你可以将现有的PCL库切换到.NET Standard。
无论如何,我要问的基本问题是我们应该针对哪种类型的库?我主要是为Xamarin项目做这件事,但如果我们可以与其他平台共享这些库,那将会很棒,特别是.NET Core和UWP。
但是,我真的很困惑为什么微软同时推出了两个看似相同的库类型:.NET Core和.NET Standard。
编辑:我现在对此并不那么困惑。我正在编辑原帖,因为我还没有完全回答我自己的问题。以下是我认为理解这些事情的关键。我愿意接受更正。解释
NET Core - 基于.NET的运行时环境,符合.NET标准API定义。
PCL - 基于.NET的库格式,由多个运行时环境支持,包括.NET,Mono,Windows Phone等
.NET标准(定义1) - 基于.NET的运行时环境的一组标准API定义
.NET标准(定义2) - 基于.NET的库格式,由多个运行时环境支持,包括.NET,Mono,Windows Phone等,这是PCL格式的延续。在Visual Studio中,可以通过访问项目的属性并编辑目标框架将PCL库转换为.NET标准库。
答案 0 :(得分:25)
这方面的文件确实令人困惑,但大致可以理解为:
PCL:以一组平台为目标的库(具有这些平台的API的“最小公分母”)。因此,在编写PCL时,您说我想要以平台A,B,C
.NET标准:一组“标准”API而非平台。所以基本上你不关心平台,只关注标准(版本1.3,1.6 ......),你的代码将适用于支持它的所有平台。
所以我认为.NET标准是要走的路:)
答案 1 :(得分:9)
我相信这个资源可以回答你的大部分问题:
https://docs.microsoft.com/en-us/dotnet/articles/standard/library
.NET标准库是.NET API的正式规范,旨在提供给所有.NET运行时。标准库背后的动机是在.NET生态系统中建立更大的一致性。
据我了解,其他库类型是特定于平台的,而.NET标准与平台无关。
如果您希望您的代码在不同平台上可用,那么.NET标准似乎是理想的,但要密切关注其他平台支持的.NET标准版本(参见链接表)。
希望这有帮助
答案 2 :(得分:9)
来自Samuel Englard(https://github.com/dotnet/corefx/issues/973#issuecomment-249582799):
.NET DLL的格式符合ECMA-335(更好地称为 公共语言基础设施)。这种格式适用于所有人 我们称之为.NET的平台;完整框架,核心,Xamarin,Mono, Silverlight等
你无法使用针对一个平台编译的DLL的原因 另一个原因是格式没有指定API(一般来说)。 因此,虽然他们都可以读取DLL,但你会遇到类问题 XYZ在一个平台上的命名空间A.B.C中,在命名空间D.E.F上 另一个,如果它存在的话。
PCL通过做两件事来解决这个问题:
他们使用了类型转发,因此即使您在代码名称A.B.C中编写了期望类XYZ的代码,也可以在其他地方使用它的平台上找到它。 它将您可以使用的API限制为您想要的所有平台共享的最低公共集。
将PCL转换为.NET标准项目并非如此 由于输出格式而重新编译,但由于元数据 包括(特别是类型转发)。
所以,我认为基本上.NET标准库与PCL库没有什么不同,除了它们将一个层放在不同标准化API集的顶层之外,这些API可能实现不同的指针(类型转发)
.NET Core当然是一个运行时环境,但我认为它与.NET Standard非常接近。除了它实现.NET标准API之外,我认为它与它没有任何特殊的关系。
请参阅此词汇表: https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md
答案 3 :(得分:3)
标准用于定位与Android API版本类似的特定API集。 nuget库只是元包,包含所有符合标准的库。
Scott Hunter在MSDEV节目中已经很好地解释了这个概念。值得一试 - http://msdevshow.com/2016/07/dot-net-core-with-scott-hunter/