ValueTuples可以与.net 4.5.2一起使用吗?

时间:2019-05-01 19:46:55

标签: .net valuetuple

我有一个针对.net Framework 4.52的MVC 5项目,我通过Nuget安装了System.ValueTuple。我在Windows 7上使用Visual Studio2017。在开发过程中,Visual Studio不会抱怨Tuple返回类型,但是在构建时会出现一系列错误:

error CS1519: Invalid token '(' in class, struct, or interface member declaration
error CS1519: Invalid token ',' in class, struct, or interface member declaration
error CS1519: Invalid token ')' in class, struct, or interface member declaration
error CS1520: Method must have a return type
error CS1026: ) expected
and more..

这是破坏方法:

public (bool, string) GetSettings()
{
    if (settingsFile.IsNullOrEmpty())
        throw new Exception("Settings file is null or empty!");
    try
    {
        var definition = new { active = false, excludeList = "" };
        var obj = JsonConvert.DeserializeAnonymousType(settingsFile, definition);
        return (obj.active, obj.excludeList);
    }
    catch
    {
        //TODO: log exception.
        return (false, string.Empty);
    }
}

除了认为它与我的框架版本不兼容之外,我不知道如何解决此问题。几个广泛的在线搜索都没有发现有关此的信息。

1 个答案:

答案 0 :(得分:0)

William Xitaras对问题的评论中提到的MSDN博客链接已经有了快速答案。

blog上阅读本段:

  

请注意,如果在项目中看不到ValueTuple,则必须将System.ValueTuple 4.3.0 NuGet程序包下载到项目中。如果您使用的是.NET Framework 4.7或更高版本,或者.NET Standard Library 2.0或更高版本,则无需执行任何操作。

因此,在.NET Framework v4.7之前,您不能直接将System.ValueTuple nuget用于.NET Framework,因为您必须首先满足一些要求。 为了确保它可以正常工作,您必须:

  1. 确保您的C#项目属性已设置为使用正确版本的C#编译器,至少是C#7.0。请参见下面的屏幕截图。
  2. 至少要使用System.ValueTuple 4.4.0版本,因为不再支持4.4.0之前的版本,因此建议至少使用v4.4.0。

要设置要使用的C#编译器版本,请转到项目属性,选择“构建”选项卡,单击“高级”按钮。可用的C#编译器列表将在我的VS 2017中显示为此屏幕截图:

C# project properties

如果将目标更改为.NET Framework 4.7或更高版本,则不应使用System.ValueTuple nuget,因为它在.NET Framework 4.7的运行时中可用。