【问题标题】:Advantages of netcoreapp2.0 vs netstandard2.0 for a library projectnetcoreapp2.0 与 netstandard2.0 对于库项目的优势
【发布时间】:2017-08-24 16:59:31
【问题描述】:

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

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

由于它不可执行,或被任何外部项目引用,是否有任何一种方式或其他方式的优势?

【问题讨论】:

  • 您可以双手绑在背后对库进行编程。确保您不能编写任何无法在其他平台上运行的代码。这是优势还是劣势,您将不可避免地自己发现。
  • 我碰巧正在为一家银行编写后端会计系统 - 在我的特定用例中,如果它最终出现在 xamarin 或 UWP 应用程序中,我会感到非常惊讶!只要它适用于 windows 和 linux 容器,我会很高兴:)

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


【解决方案1】:

它们的性质不同:

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

.NET Core 库实际上始终是相应版本的 .NET Standard 中定义的 API 的超集。 .NET Core 库中始终有可用的类型和成员,它们不是(还不是?).NET Standard 的一部分。微软发布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 Standard 中缺少的许多 .NET Core API 也存在于(完整的).NET Framework 中。

【讨论】:

  • 恕我直言,这都是准确但糟糕的建议。图书馆应始终尝试以netstandard 为目标。 netcoreapp 库不会在 Xamarin 或 .NET Framework 上恢复。
  • 我会尝试重新制定答案以考虑您的评论。
  • 我希望这个新版本能解决你的一些顾虑,@Thomas。
  • 不是很抱歉。库中的netcoreapp 允许该库仅用于 x-plat .NET Core,但不能用于 Xamarin、Unity3D、Mono 或普通的 .NET Framework。这对提问者来说可能是可以的,但一般来说不是。最便携的是netstandard1.0,API 集最小。
  • 哦,那是一个错字。固定的。感谢您的警惕。
【解决方案2】:

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

【讨论】:

  • 我使用 netcoreapp2.0 有两个原因:它是 netstandard 的超集,它可能(尽管可能不会)使我们免于一些兼容性问题,我们只是不需要可移植性netstandard 方面 - 该库将由几个 netcore2.0 应用程序共享,仅此而已。
  • 这种情况下没问题,尤其是私人图书馆。
  • @JonBates 展望未来,您应该尝试定位最低的netstandard。 Microsoft 将netstandard 视为 BCL 的形式化。试试看吧。
猜你喜欢
  • 2017-07-15
  • 2018-09-04
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多