netcoreapp2.0 与 netstandard2.0 对于图书馆项目的优势

Advantages of netcoreapp2.0 vs netstandard2.0 for a library project

我有一个预先存在的 dotnet 4.6.2 解决方案,它包含两个外部项目(同时移植)和一个共享 core 库。

我需要选择核心程序集的 TargetFramework,它可以是 netcoreapp2.0netstandard2.0

由于它不能执行,也不能被任何外部项目引用,这两种方式有什么优点吗?

NetStandard 是新推荐的库格式,可以在不同框架(NetFramwwork、NetCore、Xamarin)之间共享,因此这就是答案。 https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/

它们的性质不同:

每个版本的 .NET Core 库都(至少)实现了一个给定版本的 .NET Standard,完整的 table 可以在 .NET Standard documentation 中找到。现在,最新版本是同步的 (2.0 - 2.0),但这不是也不会总是如此。

.NET Core 库实际上始终是相应版本的 .NET Standard 中定义的 API 的超集。 .NET Core 库中始终有可用的类型和成员,它们不是(现在?).NET Standard 的一部分。微软发布 namespace-by-namespace comparisons of the available APIs.

您的库可能使用尚未在 .NET Standard 中标准化(或可能永远不会标准化)但已在 .NET Core 库中可用的 API。例如,您可以使用来自 System.Drawing 命名空间的类型,这些类型很快将在 .NET Core 库中可用,但不会成为 .NET Standard 2.0 的一部分。

因此,通过选择 netcoreapp2.0 而不是 netstandard2.0,您可以访问更大的 API,但会牺牲兼容性。

总的来说,您应该始终尝试针对最 portable 框架(此处为 netstandard)

如果这不是您的选择,那么下一个最好的办法就是从一个库中交叉定位多个框架,如此处解释:。 .NET Standard 中缺少的许多 .NET Core API 也存在于(完整的).NET Framework 中。