2

我有一个针对 .net 框架 4.52 的 MVC 5 项目,我通过 Nuget 安装了 System.ValueTuple。我在 Windows 7 上使用 Visual Studio 2017。在开发过程中,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);
    }
}

我不知道如何解决这个问题,只是认为它与我的框架版本不兼容。几项广泛的在线搜索对此一无所知。

4

1 回答 1

2

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

阅读该博客上的这一段:

请注意,如果您在项目中没有看到可用的 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# 项目属性

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

于 2019-05-01T21:44:49.457 回答