2017-07-27 468 views
16

我将现有的解决方案从.NET 4.6.2升级到.NET 4.7。该解决方案取决于几个以.NET 4.6.2为目标的nuget包,因此取决于nuget System.ValueTuple包。升级到.NET 4.7后“未定义或导入预定义类型System.ValueTuple”

但是升级后,我得到这些构建错误的一大堆:

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

我不能删除System.ValueTuple包,在评论here建议,因为其他包依赖它。 (如果我强制它,他们似乎炸毁。)

有什么建议吗?

更新17年8月8日

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

换句话说,我可以做到这一切 - 但它看起来很尴尬和笨拙。当然有更好的方法来解决这个问题?

+0

你使用什么版本的软件包?如果您更新到ValueTuple软件包的预发布版本(4.4),我希望这会得到解决。 –

+0

在4.7之前发布VS2017和C#v7是一个巨大的失误。这个东西还没有完成,目标4.7太早。你会给我一个非常头疼的问题,我的机器上无法安装4.7并且无法获得体面的诊断。处理微软的更新最近变得非常糟糕。等一下。 –

+1

对不起,打嗝。我们推送了一个完全支持.NET Framework 4.7的更新(稳定)System.ValueTuple包。请试试看。 –

回答

18

是的,升级到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而仍以.NET Framework 4.7为目标的其他库和NuGet包。

参见release notes