升级到.NET 4.7后,“未定义或导入预定义类型System.ValueTuple”
我正在将现有的解决方案从.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。 当然有更好的方法来解决这个问题吗?
是的,升级到System.ValueTuple 4.4.0 。
原因如下:
NuGet包
System.ValueTuple
提供了C#元组语法所需的ValueTuple
类型。 在.NET Framework 4.7中,我们已将类型直接添加到mscorlib
。 如果你同时使用NuGet包,以及.NET Framework 4.7,你最终会多次看到相同的类型。 这会导致Stack Overflow上报告的问题。我们更新了NuGet包,以便将.NET Framework 4.7上的元组类型转发到
mscorlib
。 这统一了类型,因此允许您使用依赖于System.ValueTuple
其他库和NuGet包,同时仍然以.NET Framework 4.7为目标。
请参阅发行说明 。
在Visual Studion中,NuGet包System.ValueTuple提供了ValueTuple类型。 所以将System.ValueTuple更新到最新版本v4.4.0。 意味着将System.ValueTuple升级到更高版本,然后升级到当前版本或上一版本。