我有一个预先存在的dotnet 4.6.2解决方案,它包含两个外部项目(同时移植)和一个共享的core
库。
我需要选择核心程序集TargetFramework
,它可以是netcoreapp2.0
或netstandard2.0
。
由于它不可执行,或被任何外部项目引用,这样或那样有什么优势吗?
答案 0 :(得分:22)
它们的性质不同:
每个版本的.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。
您的库可能会使用尚未在.NET标准中标准化的API(或可能永远不会),但已在.NET核心库中提供。例如,您可以使用System.Drawing命名空间中的类型,这些类型很快将在.NET核心库中提供,但不会成为.NET Standard 2.0的一部分。
因此,通过选择netcoreapp2.0而不是netstandard2.0,您可以获得更大的API,但会牺牲兼容性。
总的来说,您应该始终尝试定位最便携的框架(此处为netstandard)。
如果它不是您的选择,那么下一个最好的方法是从单个库中交叉定位多个框架,如下所述:How do you multi-target a .NET Core class library with csproj?。 .NET标准中缺少许多.NET Core API也存在于(完整的).NET Framework中。
答案 1 :(得分:3)
NetStandard是新推荐的库格式,可以在不同的框架(NetFramwwork,NetCore,Xamarin)之间共享,这样就可以了。 https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/