无法从使用 Visual Studio 2017 和 C# 7.0 的方法返回元组
Posted
技术标签:
【中文标题】无法从使用 Visual Studio 2017 和 C# 7.0 的方法返回元组【英文标题】:Unable to return Tuple from a method using Visual Studio 2017 and C# 7.0 【发布时间】:2017-04-11 03:16:38 【问题描述】:我已经安装了一周前发布的 Visual Studio 2017 Community,并开始探索 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 的特性,那么我们需要为每个项目都这样做是很奇怪的?!
【问题讨论】:
Enabling c# 7 in a asp.net application的可能重复 【参考方案1】:我刚刚在Roslyn 上浏览了此页面,其中描述了以下步骤来使其正常工作:
-
开始一个 C# 项目
添加对
System.ValueTuple
的引用
NuGet 包(预发布)
按照这些步骤,它现在可以工作了。但是对于我们开始的每个项目都需要这样做,这真的很奇怪!希望当我们正式发布时这个问题得到解决!
【讨论】:
下一版本中应该包含的一件事是代码修复,可让您轻松添加包。 这个解决方案帮助了我;即使是 2017 年 3 月下载的 VS2017 Professional 完整版! 很生气,这不是官方语言。遇到了同样的问题,这是修复。他们将其作为 C# 7 语言功能进行营销,而实际上它更像是 C# 7 扩展功能。我想当你使用新的 Roslyn 编译器(我是它的粉丝)时,事情会变得像这样令人毛骨悚然......无论如何,这都是 IMO 的一个可悲的副作用。 @MichaelPuckettII 我认为这是因为此功能需要类在 .NET 框架中存在并且他们还没有发布新的,这就是为什么临时解决方案是将其包含为一个 Nuget 包。当下一个 .NET 框架发布时,该功能所需的类应该已经内置。如果不是,那么这是一个需要解释的问题。 刚升级到 .NET Framework 4.7 后我收到了这个错误,原来 ValueTuple 现在是 4.7 的一部分,所以卸载 tuple 包是我的解决方案【参考方案2】:我在安装 .Net 4.7 Framework 后开始出现此错误,并将我的项目更改为面向 .Net 4.7
ValueTuple 现在包含在 .Net 4.7 中,因此您不必手动引用 ValueTuple。
要纠正编译错误,我所要做的就是从项目的引用中删除对 System.ValueTuple 的引用。
【讨论】:
太好了,按照你的建议,现在它包含在 .NET 4.7 中,不再需要从 NuGet 安装。谢谢。 我们可以在 .net 上使用它吗?现在是 2019 年。我的目标是 .net 4.7.2【参考方案3】:我在更新到 .NET 4.7.2 后也遇到了这个错误,并且能够通过使用以下方法重新安装 nuget 包来修复它:
Update-Package -Reinstall
【讨论】:
【参考方案4】:当我从 .NET 4.6.2 升级到 .NET 4.7.2 时,我也遇到了这个问题。不幸的是,我无法删除对 System.ValueTuple
的包引用,因为我使用的另一个 NuGet 包依赖于它。
最后我找到了根本原因:项目文件夹中有一个 .NET 4.6.2 版本的mscorlib.dll
(发布操作的输出),MSBuild 决定引用这个程序集而不是官方的.NET 4.7.2 参考程序集位于C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
。
由于 .NET 4.7 中引入了 System.ValueTuple,MSBuild 编译失败,因为它在 .NET 4.6.2 的引用程序集中找不到类型。
【讨论】:
以上是关于无法从使用 Visual Studio 2017 和 C# 7.0 的方法返回元组的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017无法安装提示无法联网,而且还无法从官网下载Vs2017
无法从UIKit.UIImage转换为ZXing.LuminanceSource - 2017年Visual Studio中的Xamarin iOS
Visual Studio 2017 - 无法安装 WDK 扩展