System.Text.Json packages 添加 System.ValueTuple package 即使它不需要它

System.Text.Json packages adds System.ValueTuple package even though it shouldnt need it

所以这很容易重现。创建一个 .Net Framework 4.7.2 项目并添加 System.Text.Json nuget 包 (v 5.0.2),看到它说它将添加依赖包,包括 System.ValueTuple.

但据我了解不应该。

.Net Framework 4.7.2 是 .Net Standard 2.0(请参阅此处 https://docs.microsoft.com/en-us/dotnet/standard/net-standard)并在 BCL 中包含 System.ValueTuple。

我们可以在 nuget 网站上看到 System.Text.Json https://www.nuget.org/packages/System.Text.Json 对于 .net standard 2.0 System.ValueTuple 不是依赖项

但它适用于框架 4.6.1

所以这是个大问题...为什么当我的项目目标是 4.7.2(即 .Net Standard 2.0)时 nuget 解决 4.6.1 的依赖关系?

正如评论中所讨论的那样,根据 this GitHub issue“如果一个库仅是 netstandard,net472 将选择它。如果一个库有任何 net 框架目标,net472 将选择它相反。"

所以这是预期的行为,如果不是特别明显的话。

幸运的是,System.ValueTuple NuGet 包有一个单独的 .NET 4.7 目标,它将类型转发给 BCL 实现,因此额外的引用应该不会造成任何问题。