无法从使用 Visual Studio 2017 和 C# 7.0 的方法中 return 元组
Unable to return Tuple from a method using Visual Studio 2017 and C# 7.0
安装了一周前发布的Visual Studio2017 Community,开始探索C#7的新特性
所以我创建了一个简单的方法 returns 两个值:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
编译器产生错误:
Error CS8137 Cannot define a class or member that utilizes tuples
because the compiler required type
'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be
found. Are you missing a reference?
我尝试在框架中使用此名称查找引用,但没有成功!
如果我们需要额外的东西来使用 C# 7.0 的功能,那么我们需要为每个项目都这样做是很奇怪的?!
我只是 运行 通过 Roslyn 上的此页面,其中描述了以下步骤以使其正常工作:
- 启动 C# 项目
- 添加对
System.ValueTuple
的引用
来自 NuGet 的包(预发布)
按照这些步骤,它现在可以正常工作了。但是,我们需要为我们开始的每个项目都这样做,这真的很奇怪!希望在我们发布正式版时解决这个问题!
我在安装 .Net 4.7 Framework 并将我的项目更改为目标 .Net 4.7 后开始出现此错误
ValueTuple 现在包含在 .Net 4.7 中,因此您不必手动引用 ValueTuple。
要纠正编译错误,我所要做的就是从我的项目引用中删除对 System.ValueTuple 的引用。
我在从 .NET 4.6.2 升级到 .NET 4.7.2 时也遇到了这个问题。不幸的是,我无法删除对 System.ValueTuple
的包引用,因为我使用的另一个 NuGet 包依赖于它。
我终于找到了根本原因:项目文件夹中有一个 mscorlib.dll
的 .NET 4.6.2 版本(发布操作的输出),MSBuild 决定引用这个程序集而不是位于 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.
中的官方 .NET 4.7.2 参考程序集
由于.NET 4.7引入了System.ValueTuple,MSBuild在.NET 4.6.2的引用程序集中找不到类型,导致编译失败
我在更新到 .NET 4.7.2 后也遇到了这个错误,并且能够通过使用以下方法重新安装 nuget 包来修复它:
Update-Package -Reinstall
安装了一周前发布的Visual Studio2017 Community,开始探索C#7的新特性
所以我创建了一个简单的方法 returns 两个值:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
编译器产生错误:
Error CS8137 Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?
我尝试在框架中使用此名称查找引用,但没有成功!
如果我们需要额外的东西来使用 C# 7.0 的功能,那么我们需要为每个项目都这样做是很奇怪的?!
我只是 运行 通过 Roslyn 上的此页面,其中描述了以下步骤以使其正常工作:
- 启动 C# 项目
- 添加对
System.ValueTuple
的引用 来自 NuGet 的包(预发布)
按照这些步骤,它现在可以正常工作了。但是,我们需要为我们开始的每个项目都这样做,这真的很奇怪!希望在我们发布正式版时解决这个问题!
我在安装 .Net 4.7 Framework 并将我的项目更改为目标 .Net 4.7 后开始出现此错误
ValueTuple 现在包含在 .Net 4.7 中,因此您不必手动引用 ValueTuple。
要纠正编译错误,我所要做的就是从我的项目引用中删除对 System.ValueTuple 的引用。
我在从 .NET 4.6.2 升级到 .NET 4.7.2 时也遇到了这个问题。不幸的是,我无法删除对 System.ValueTuple
的包引用,因为我使用的另一个 NuGet 包依赖于它。
我终于找到了根本原因:项目文件夹中有一个 mscorlib.dll
的 .NET 4.6.2 版本(发布操作的输出),MSBuild 决定引用这个程序集而不是位于 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.
由于.NET 4.7引入了System.ValueTuple,MSBuild在.NET 4.6.2的引用程序集中找不到类型,导致编译失败
我在更新到 .NET 4.7.2 后也遇到了这个错误,并且能够通过使用以下方法重新安装 nuget 包来修复它:
Update-Package -Reinstall