我安装了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);
}
当我编译时,我收到错误:
未定义或导入预定义类型'System.ValueTuple'2'
根据the blog post,默认情况下此功能应为"on" .
我做错了什么?
9 回答
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
对于Visual Studio Code,使用内置终端并运行:
不要忘记之后运行
dotnet restore
.确保安装了VS的.NET 4.6.2 Developer Pack,然后从NuGet中拉入
System.ValueTuple
包 .对于.NET 4.6.2或更低版本,.NET Core 1.x和.NET Standard 1.x,您需要安装NuGet包
System.ValueTuple
:或者在VS 2017中使用包参考:
.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
. 通过添加System.ValueTuple
NuGet Package
来做到这一点如果其他人遇到同样的问题,我在将项目更新到4.7后遇到了这个错误 . 奇怪的是,我不得不删除System.ValueTuple引用以消除此错误 .
我必须检查System.ValueTuple.dll文件是否在源代码管理下并更正其在.cssproj文件中的引用:
右键单击解决方案中的每个项目
卸载项目
编辑.cssproj文件:更改
<Reference Include =“System.ValueTuple”>
<HintPath>
.... \项目名\项目名\ OBJ \发布\包\ PackageTmp \ BIN \ System.ValueTuple.dll
</ HintPath>
</ Reference>
成
<Reference Include =“System.ValueTuple”>
<HintPath>
.. \包\ System.ValueTuple.4.4.0 \ LIB \ netstandard1.0 \ System.ValueTuple.dll
</ HintPath>
</ Reference>
保存更改并重新加载项目
找到System.ValueTuple.dll并将其保存到此文件夹中
将此文件的引用添加到源代码管理中
(可选):7 . 以这种方式解决与另一个.dll文件相同的问题
如果将项目从.Net 4.6.x升级到.Net 7.x,则需要删除对System.ValueTuple的引用,否则会出现错误 .
如果您从某人那里获得项目代码,也许您可以看到此错误消息 . 我在卸载System.ValueTuple v4.4.0后安装System.ValueTuple v4.3.0解决了这个问题