升级到.NET 4.7后,"未定义或导入预定义类型System.ValueTuple"

Ken*_*ith 21 .net c# nuget

我正在将现有的解决方案从.NET 4.6.2升级到.NET 4.7.此解决方案依赖于几个针对.NET 4.6.2的nuget包,因此依赖于nuget System.ValueTuple包.

但升级后,我收到了大量这些构建错误:

Error CS8179 Predefined type 'System.ValueTuple`2' is not defined or imported

我无法取出System.ValueTuple包,在评论中建议在这里,因为其他软件包依赖于它.(如果我强迫它,它们似乎会爆炸.)

有什么建议?

更新8/8/17

我已经发现我可以删除System.ValueTuple包,我可以通过这种方式获得编译解决方案.但是,我在解决方案中有十几个NuGet包似乎是针对.NET 4.6.2,因此需要System.ValueTuple作为依赖.我可以安装它们,然后强制删除System.ValueTuple软件包,但是如果这些软件包中的任何软件包有更新,并且我安装了更新 - 那么System.ValueTuple软件包将再次安装,系统将停止构建,直到我再次删除软件包.

换句话说,我可以做到这一切 - 但它似乎很尴尬和kludgy.当然有更好的方法来解决这个问题吗?

Imm*_*rth 27

是的,升级到System.ValueTuple 4.4.0.

原因如下:

NuGet包System.ValueTuple提供了ValueTupleC#元组语法所需的类型.在.NET Framework 4.7中,我们直接添加了类型mscorlib.如果您同时使用NuGet包,以及.NET Framework 4.7,您最终会多次看到相同的类型.这会导致Stack Overflow上报告的问题.

我们更新了NuGet包,以便将.NET Framework 4.7上的元组类型转发到mscorlib.这统一了类型,因此允许您使用依赖于System.ValueTuple.NET Framework 4.7时依赖的其他库和NuGet包.

请参阅发行说明.