Я установил Visual Studio 2017 Community, выпущенный неделю назад, и начал изучать новые возможности 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#
.net
visual-studio
visual-studio-2017
c#-7.0
Зейн Макки
источник
источник
Ответы:
Я только что просмотрел эту страницу в Roslyn, в которой описаны следующие шаги, чтобы заставить это работать:
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, который я использую.Наконец, я смог найти основную причину:
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.
источник
Я тоже получил эту ошибку после обновления до .NET 4.7.2 и смог исправить ее, переустановив пакеты nuget, используя:
источник