Zainstalowałem Visual Studio 2017 Community, które zostało wydane tydzień temu i zacząłem odkrywać nowe funkcje C # 7.
Stworzyłem więc prostą metodę, która zwraca dwie wartości:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
Kompilator generuje błąd:
Błąd CS8137 Nie można zdefiniować klasy lub elementu członkowskiego, który używa krotek, ponieważ nie można znaleźć wymaganego przez kompilator typu „System.Runtime.CompilerServices.TupleElementNamesAttribute”. Brakuje Ci referencji?
Próbowałem znaleźć odniesienie w ramach o tej nazwie, ale bez powodzenia!
Jeśli potrzebujemy dodatkowych rzeczy do korzystania z funkcji C # 7.0, to jest bardzo dziwne, że musimy to robić dla każdego projektu ?!
c#
.net
visual-studio
visual-studio-2017
c#-7.0
Zein Makki
źródło
źródło
Odpowiedzi:
Właśnie przejrzałem tę stronę w Roslyn, która opisuje następujące kroki, aby to działało:
System.ValueTuple
pakietu z NuGet (wersja wstępna)Po tych krokach teraz działa. Ale to naprawdę bardzo dziwne, że musimy to robić dla każdego projektu, który zaczynamy! Mam nadzieję, że problem zostanie rozwiązany, gdy dotrzemy do oficjalnej wersji!
źródło
Zacząłem otrzymywać ten błąd po zainstalowaniu .Net 4.7 Framework i zmieniłem projekt na docelowy .Net 4.7
ValueTuple jest teraz dołączony do .Net 4.7, więc nie musisz ręcznie odwoływać się do ValueTuple.
Wszystko, co musiałem zrobić, aby naprawić błąd kompilacji, to usunąć odwołanie do System.ValueTuple z odniesień do mojego projektu.
źródło
Napotkałem również ten problem podczas uaktualniania z .NET 4.6.2 do .NET 4.7.2. Niestety, nie udało mi się usunąć odwołania do pakietu,
System.ValueTuple
ponieważ od niego zależy inny pakiet NuGet, którego używam.Wreszcie udało mi się zlokalizować główną przyczynę:
mscorlib.dll
w folderze projektu znajdowała się wersja .NET 4.6.2 (dane wyjściowe operacji publikowania) i program MSBuild zdecydował się odwołać do tego zestawu zamiast do oficjalnej dokumentacji .NET 4.7.2 zespół znajdujący się wC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.Ze względu na fakt, że System.ValueTuple został wprowadzony w .NET 4.7, kompilacja programu MSBuild nie powiodła się, ponieważ nie można znaleźć typu w zestawie referencyjnym programu .NET 4.6.2.
źródło
Otrzymałem również ten błąd po aktualizacji do .NET 4.7.2 i mogłem go naprawić, ponownie instalując pakiety NuGet przy użyciu:
źródło