无法从使用Visual Studio 2017和C#7.0的方法返回元组
我安装了一周前发布的Visual Studio 2017社区,并开始探索C#7的新功能 因此,我创建了一个简单的方法,返回两个值:无法从使用Visual Studio 2017和C#7.0的方法返回元组,c#,.net,visual-studio,visual-studio-2017,c#-7.0,C#,.net,Visual Studio,Visual Studio 2017,C# 7.0,我安装了一周前发布的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() =&g
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特性,那么对于每个项目我们都需要这样做是非常奇怪的我刚刚浏览了本页,其中描述了以下步骤以使其正常工作:
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包依赖于它
最后,我找到了根本原因:项目文件夹(发布操作的输出)中有一个.NET 4.6.2版本的mscorlib.dll
,MSBuild决定引用此程序集,而不是位于C:\Program Files(x86)中的官方.NET 4.7.2引用程序集\参考Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
由于System.ValueTuple是在.NET 4.7中引入的,MSBuild未能编译,因为它在.NET 4.6.2的引用程序集中找不到该类型。在更新到.NET 4.7.2后,我也遇到了此错误,并能够通过使用以下方法重新安装nuget包来修复此错误:
Update-Package -Reinstall
下一个版本中应该有一件事,那就是一个代码修复程序,它可以让你轻松地添加包;即使是2017年3月下载的VS2017 Professional的完整版本!这不是官方语言,我很恼火。遇到了同样的问题,这是修复。他们将其作为C#7语言特性进行营销,而实际上它更像是C#7扩展特性。我想当你使用新的Roslyn编译器(我是它的粉丝)时,事情可能会变得像那样毛茸茸的。。。不管怎样,这对我来说都是一个可悲的副作用。@MichaelPuckettII我认为这是因为该功能需要类存在于.NET框架中,而且他们还没有发布新的类,这就是为什么临时解决方案将其作为Nuget包包含的原因。当下一个.NET framework发布时,此功能所需的类应该已经内置。如果不是,那么这是一个需要解释的问题。在刚刚升级到.NET Framework 4.7之后,我收到了这个错误,原来ValueTuple现在是4.7的一部分,所以卸载tuple包是我的解决方案。根据您的建议,可能是Great的副本,现在它包含在.NET 4.7中,不再需要从NuGet安装。谢谢。我们已经可以在.net上使用了吗。现在是2019年。我的目标是.NET4.7.2