无法从使用Visual Studio 2017和C#7.0的方法返回Tuple

时间:2016-11-27 07:27:58

标签: c# .net visual-studio visual-studio-2017 c#-7.0

我已经安装了一周前发布的Visual Studio 2017社区,我开始探索C#7的新功能。

所以我创建了一个返回两个值的简单方法:

public class Program
{
    public static void Main(string[] args)
    {
        (int sum, int count) a = ReturnTwoValues();
    }

    static (int sum, int count) ReturnTwoValues() => (1, 1);
}

编译器生成错误:

  

错误CS8137无法定义使用元组的类或成员   因为编译器需要类型   'System.Runtime.CompilerServices.TupleElementNamesAttribute'不能   找到。你错过了参考吗?

我尝试在此框架中使用此名称查找引用,但没有运气!

如果我们需要额外的东西来使用C#7.0功能,那么我们需要为每个项目做到这一点非常奇怪吗?

4 个答案:

答案 0 :(得分:122)

我刚刚浏览了Roslyn上的这个页面,其中介绍了以下步骤:

  1. 启动C#项目
  2. 添加对System.ValueTuple的引用 来自NuGet的包(预发布)
  3. enter image description here

    按照这些步骤,它现在正在运行。但是,对于我们开始的每一个项目,我们都需要这样做真的很奇怪!希望在我们达到官方发布时这是固定的!

答案 1 :(得分:40)

我在安装.Net 4.7 Framework后开始出现此错误,并将我的项目更改为目标.Net 4.7

ValueTuple现已包含在.Net 4.7中,因此您无需手动引用ValueTuple。

我必须做的就是纠正编译错误,就是从我项目的引用中删除对System.ValueTuple的引用。

答案 2 :(得分:0)

当我从.NET 4.6.2升级到.NET 4.7.2时,我也遇到了这个问题。不幸的是,我无法删除对System.ValueTuple的软件包引用,因为我使用的另一个NuGet软件包依赖于它。

最后,我找到了根本原因:在项目文件夹中存在着{。{1}}的.NET 4.6.2版本(发布操作的输出),MSBuild决定引用此程序集而不是引用位于mscorlib.dll中的官方.NET 4.7.2参考程序集。

由于.NET 4.7中引入了System.ValueTuple,因此MSBuild编译失败,因为它无法在.NET 4.6.2的引用程序集中找到类型。

答案 3 :(得分:0)

在更新到.NET 4.7.2之后,我也遇到了此错误,并且能够通过使用以下方法重新安装nuget软件包来解决此问题:

Update-Package -Reinstall