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

时间:2017-07-27 01:34:53

标签: c# .net 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包,正如评论here中所建议的那样,因为其他包依赖于它。 (如果我强迫它,它们似乎会爆炸。)

有什么建议吗?

更新8/8/17

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

换句话说,我可以把它全部搞定 - 但它看起来很尴尬和笨拙。当然,有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:26)

是的,升级到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为目标。

请参阅release notes

答案 1 :(得分:3)

在Visual Studion中,NuGet包System.ValueTuple提供了ValueTuple类型。所以将System.ValueTuple更新到最新版本v4.4.0。意味着将System.ValueTuple升级到更高版本,然后升级到当前版本或上一版本。