【问题标题】:"Predefined type System.ValueTuple is not defined or imported" after upgrading to .NET 4.7升级到 .NET 4.7 后“未定义或导入预定义类型 System.ValueTuple”
【发布时间】:2018-04-30 18:41:58
【问题描述】:

我正在将现有解决方案从 .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 包,正如 cmets here 中所建议的那样,因为其他包依赖于它。 (如果我强迫它,它们似乎会爆炸。)

有什么建议吗?

2017 年 8 月 8 日更新

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

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

【问题讨论】:

  • 你使用的是什么版本的包?如果您更新到 ValueTuple 包的预发布版本 (4.4),我希望这个问题能够得到解决。
  • 在 4.7 完成之前交付 VS2017 和 C# v7 简直就是一个巨大的错误。这些东西还没有完成,目标 4.7 还为时过早。你会让我非常头疼,我无法在我的机器上安装 4.7,也无法获得像样的诊断。最近处理 Microsoft 更新变得非常麻烦。稍等。
  • 抱歉打嗝。我们刚刚推送了一个更新的(稳定的)System.ValueTuple 包,它完全支持 .NET Framework 4.7。请试一试。

标签: c# .net nuget


【解决方案1】:

是的,升级到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

【讨论】:

    【解决方案2】:

    在 Visual Studion 中,NuGet 包 System.ValueTuple 提供了 ValueTuple 类型。所以将 System.ValueTuple 更新到最新版本 v4.4.0。表示将 System.ValueTuple 升级到高于当前或以前的版本。

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 2015-09-22
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      相关资源
      最近更新 更多