关于将应用程序从 .Net Framework 移植到 .Net core 的问题

Pan*_*are 5 .net .net-core

在微软关于“移植过程概述”的文档中,1 点提到了以下内容

将您希望移植到目标 .NET Framework 4.7.2 或更高版本的所有项目重新定位。此步骤可确保当 .NET Core 不支持特定 API 时,您可以对特定于 .NET Framework 的目标使用 API 替代方案。

有人可以用一些例子帮助我理解第二句话吗?我无法理解为什么在移植到 .Net Core 之前需要将项目定位到 .Net Framework 4.7.2。

另一个链接中他们提到了以下事情

此处列出的版本代表 NuGet 用于确定给定 .NET Standard 库是否适用的规则。虽然 NuGet 认为 .NET Framework 4.6.1 支持 .NET Standard 1.5 到 2.0,但使用为 .NET Framework 4.6.1 项目中的这些版本构建的 .NET Standard 库存在一些问题。对于需要使用此类库的 .NET Framework 项目,我们建议您将项目升级到目标 .NET Framework 4.7.2 或更高版本。

知道他们在这里谈论什么问题吗?(上面以粗体突出显示)

Ian*_*emp 4

虽然 .NET Framework 4.6.1 在技术上支持 .NET Standard 2.0,但 4.6.1 中存在一些无意的遗漏,这意味着如果没有额外的 NuGet 包,它实际上并不支持完整的 Standard 2.0 API 表面。这仅在框架 4.7.2 中得到纠正。

因此,如果您希望迁移到 Core,最安全的做法是首先将代码迁移到 Framework 4.7.2。这样,任何在 Core/Standard 中不需要的“补丁”NuGet 包(如果存在的话实际上会导致问题)将不再存在。

在 4.7.2 之前的 Framework 版本中构建的库也会引入这些附加包,并产生相同的结果。但是,如果您的代码位于 4.7.2 上,则将使用内置 API,这再次使得额外的包变得不必要。