我已经安装了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);
}

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

预定义类型“系统”。ValueTuple´2´未定义或导入

根据这篇博文,这个功能在默认情况下应该是“开启”的。

我做错了什么?


当前回答

对于。net 4.6.2或更低版本,请使用。net Core 1。. x和。net标准1。安装NuGet包System。ValueTuple:

Install-Package "System.ValueTuple"

或者在VS 2017中使用包引用:

<PackageReference Include="System.ValueTuple" Version="4.4.0" />

. net Framework 4.7、. net Core 2.0和. net Standard 2.0都包含这些类型。

其他回答

它是. net Framework 4.7的一部分。

只要你的目标不是上面的框架或更高的框架(或。net Core 2.0 / . net Standard 2.0),你就需要引用ValueTuple。通过添加系统来完成此操作。ValueTuple NuGet包

为了防止其他人遇到同样的问题,我在将一个项目更新到4.7后遇到了这个错误。奇怪的是,我不得不移除这个系统。ValueTuple引用来消除此错误。

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

dotnet add package "System.ValueTuple"

之后别忘了运行dotnet恢复。

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

最终我找到了根本原因:在项目文件夹中有一个。net 4.6.2版本的mscorlib.dll(发布操作的输出),MSBuild决定引用这个程序集,而不是位于C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2的官方。net 4.7.2参考程序集。

由于系统。ValueTuple是在。net 4.7中引入的,MSBuild编译失败,因为它在。net 4.6.2的参考程序集中找不到该类型。

(https://stackoverflow.com/a/57777123/128709副本)

确保你为VS安装了。net 4.6.2 Developer Pack,然后拉入System。NuGet中的ValueTuple包。