Можно ли использовать ValueTuples с .net 4.5.2? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть проект MVC 5, нацеленный на .net framework 4.52, и я установил System.ValueTuple через Nuget. Я использую Visual Studio 2017 на Windows 7. Во время разработки 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 голосов
/ 02 мая 2019

Ссылка на блог MSDN, упомянутая в комментариях Уильяма Кситараса по этому вопросу, уже имеет быстрый ответ.

Прочтите этот абзац на этом блоге :

Обратите внимание, что если вы не видите ValueTuple, доступный в вашем проекте, вам необходимо загрузить пакет NuGet System.ValueTuple 4.3.0 в ваш проект. Вам не нужно ничего делать, если вы используете .NET Framework 4.7 или выше или .NET Standard Library 2.0 или выше.

Следовательно, вы не можете использовать этот nuget System.ValueTuple напрямую для .NET Framework до .NET Framework v4.7, потому что сначала нужно выполнить некоторые требования. Чтобы это работало, вы должны:

  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 или новее, вам не следует использовать nuget System.ValueTuple, поскольку он доступен во время выполнения .NET Framework 4.7.

...