我已经安装了一周前发布的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功能,那么我们需要为每个项目做到这一点非常奇怪吗?
答案 0 :(得分:122)
我刚刚浏览了Roslyn上的这个页面,其中介绍了以下步骤:
答案 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