Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从使用Visual Studio 2017和C#7.0的方法返回元组_C#_.net_Visual Studio_Visual Studio 2017_C# 7.0 - Fatal编程技术网

无法从使用Visual Studio 2017和C#7.0的方法返回元组

无法从使用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

我安装了一周前发布的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特性,那么对于每个项目我们都需要这样做是非常奇怪的

我刚刚浏览了本页,其中描述了以下步骤以使其正常工作:

  • 启动一个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包依赖于它

    最后,我找到了根本原因:项目文件夹(发布操作的输出)中有一个.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