未定义或导入预定义类型'System.ValueTuple'2'

gsh*_*arp 362 c# c#-7.0 visual-studio-2017

我安装了Visual Studio 15 Preview 3并尝试使用新的元组功能

static void Main(string[] args)
{
    var x = DoSomething();
    Console.WriteLine(x.x);
}

static (int x, int y) DoSomething()
{
    return (1, 2);
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我收到错误:

未定义或导入预定义类型'System.ValueTuple'2'

根据博客文章,这个功能默认情况下应该"打开".

我做错了什么?

Eli*_*bel 504

对于.NET 4.6.2或更低版本,.NET Core 1.x和.NET Standard 1.x,您需要安装NuGet包System.ValueTuple:

Install-Package "System.ValueTuple"
Run Code Online (Sandbox Code Playgroud)

或者在VS 2017中使用包参考:

<PackageReference Include="System.ValueTuple" Version="4.4.0" />
Run Code Online (Sandbox Code Playgroud)

.NET Framework 4.7,.NET Core 2.0和.NET Standard 2.0包括这些类型.

  • 好吧,它似乎不在4.6.2中. (14认同)
  • 使用4.6.2,仍然需要这个包. (12认同)
  • 使用.NET 4.7,该软件包原生包含在内. (8认同)
  • 谢谢.这是否意味着它适用于4.6.2?调试器仍显示x.Item1 x.Item2.而不是(xx和xy)你知道这会改变吗? (3认同)
  • Install-Package"System.ValueTuple"-IncludePrerelease (2认同)
  • 安装包后VS仍然在抱怨! (2认同)
  • 只是一个说明(花了一些时间):如果你在同一个项目中使用包 ***Microsoft.Net.Compilers***,它应该更新到(至少)2.0 版,否则你将获得构建/语法错误。来源/信用:/sf/answers/2909587901/。 (2认同)

Nik*_*ita 39

这是其中的一部分.NET Framework 4.7.

只要您不针对上述框架或更高版本(或.NET Core 2.0/ .NET Standard 2.0),您就需要参考ValueTuple.这样做是通过添加System.ValueTuple NuGet Package

  • 好的,我刚发现问题:dll System.ValueTuple在我的项目文件(csproj)中被硬编码.从项目文件中删除此条目可以解决问题. (9认同)

Jul*_*eur 13

ValueTuple类型内置于更新的框架中:

  • .NET Framework 4.7
  • .NET Core 2.0
  • 单声道5.0
  • .Net Standard 2.0

在您定位其中一个较新的框架版本之前,您需要引用ValueTuple包.

有关详细信息,请访问http://blog.monstuff.com/archives/2017/03/valuetuple-availability.html


Seb*_*ull 5

对于Visual Studio Code,使用内置终端并运行:

dotnet add package "System.ValueTuple"
Run Code Online (Sandbox Code Playgroud)

不要忘记dotnet restore事后跑.

  • 注意:请勿使用.Net 4.7执行此操作 (9认同)