.net - netcoreapp2.0与netstandard2.0在图书馆项目中的优势

标签 .net .net-core .net-standard

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

我需要选择核心程序集的TargetFramework,它可以是netcoreapp2.0netstandard2.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/

相关文章:

c# - 无法安全地锁定 ConcurrentDictionary 的值

.net - 通过 .NET 从 VB6 调用 Web 服务失败

c# - 我可以根据 .NET Core 中的运行时标识符定义常量吗?

c# - 如何使用 AuthorizationHandlerContext 在 ASP.NET Core 2 自定义基于策略的授权中访问当前的 HttpContext

c# - 在 NETStandard 类库中添加引用

c# - GetTypeInfo 可以返回 null 吗?

c# - C# 中考虑每月 30 天的天数计算

.net - WPF 控件未显示在 WinForms 应用程序的 ElementHost 中

c# - 如何在 .NET Core 中获取 CPU 名称?

c# - 如何正确地后处理 Refit 返回值?