I've installed Visual Studio 2017 Community that was released a week ago, and I started exploring the new features of 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, тогда очень странно, что нам нужно делать это для каждого проекта?!

Ответы (4)

Я только что просмотрел эту страницу на Roslyn, где описаны следующие шаги, чтобы заставить это работать:

  1. Запустить проект C #
  2. Добавить ссылку на System.ValueTuple пакет из NuGet (предварительная версия)

enter image description here

После этих шагов он теперь работает. Но это действительно очень странно, что нам нужно делать это для каждого отдельного проекта, который мы начинаем! Надеюсь, это будет исправлено, когда мы дойдем до официального релиза!

Я начал получать эту ошибку после того, как установил .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, который я использую.

Наконец, мне удалось определить основную причину: в папке проекта валялась версия mscorlib.dll для .NET 4.6.2 (результат операции публикации), и MSBuild решил сослаться на эта сборка вместо официальной эталонной сборки .NET 4.7.2, расположенной в C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.7.2.

Из-за того, что System.ValueTuple был представлен в .NET 4.7, MSBuild не удалось выполнить компиляцию, поскольку не смог найти тип в эталонной сборке .NET 4.6.2.

I got this error too after updating to .NET 4.7.2 and was able to fix it by re-installing nuget packages using:

Update-Package -Reinstall

2022 WebDevInsider