我有一个预先存在的dotnet 4.6.2解决方案,该解决方案包含两个外部项目(要同时移植)和一个共享的core
库。
我需要选择核心程序集的TargetFramework
,它可以是netcoreapp2.0
或netstandard2.0
。
由于它将无法执行,也不会被任何外部项目引用,因此,一种方法或另一种方法是否有优势?
最佳答案
它们的性质不同:
.NET Standard是一组API(标准)
.NET Core Libraries是一组库(实现)
.NET Core Librairies的每个版本都实现(至少).NET Standard的给定版本,并且可以在.NET Standard documentation中找到完整的表。目前,最新版本是同步的(2.0-2.0),但事实并非如此,而且并非总是如此。
.NET核心库实际上始终是.NET标准相应版本中定义的API的超集。 .NET核心库中始终有可用的类型和成员,这些类型和成员不是(但?).NET标准的一部分。 Microsoft发布namespace-by-namespace comparisons of the available APIs。
您的库可能使用的API尚未在.NET Standard中进行标准化(或者可能从未被标准化),但已经在.NET Core库中提供。例如,您可以使用System.Drawing命名空间中的类型,该类型将很快在.NET Core库中可用,但不会成为.NET Standard 2.0的一部分。
因此,通过选择netcoreapp2.0而非netstandard2.0,您可以访问更大的API,而以兼容性为代价。
一般而言,您应该始终尝试针对最可移植的框架(此处为netstandard)。
如果不是您的选择,那么下一个最好的选择是从单个库中交叉定位多个框架,如此处所述:How do you multi-target a .NET Core class library with csproj?。 (完整的).NET Framework中还存在.NET标准中缺少的许多.NET Core API。
关于.net - netcoreapp2.0与netstandard2.0在图书馆项目中的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45867239/