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 实现,因此额外的引用应该不会造成任何问题。
所以这很容易重现。创建一个 .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 实现,因此额外的引用应该不会造成任何问题。