Ich habe die vor einer Woche veröffentlichte Visual Studio 2017-Community installiert und die neuen Funktionen von C # 7 untersucht.
Also habe ich eine einfache Methode erstellt, die zwei Werte zurückgibt:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
Der Compiler generiert einen Fehler:
Fehler CS8137 Eine Klasse oder ein Mitglied, das Tupel verwendet, kann nicht definiert werden, da der vom Compiler erforderliche Typ 'System.Runtime.CompilerServices.TupleElementNamesAttribute' nicht gefunden werden kann. Vermissen Sie eine Referenz?
Ich habe versucht, eine Referenz im Framework mit diesem Namen zu finden, aber ohne Glück!
Wenn wir zusätzliche Dinge benötigen, um C # 7.0-Funktionen nutzen zu können, ist es sehr seltsam, dass wir das für jedes Projekt tun müssen ?!
c#
.net
visual-studio
visual-studio-2017
c#-7.0
Zein Makki
quelle
quelle
Antworten:
Ich habe gerade diese Seite auf Roslyn durchgesehen, auf der die folgenden Schritte beschrieben werden, damit dies funktioniert:
System.ValueTuple
Paket von NuGet hinzu (Vorabversion)Nach diesen Schritten funktioniert es jetzt. Aber es ist wirklich sehr seltsam, dass wir das für jedes einzelne Projekt tun müssen, das wir starten! Hoffe, dies ist behoben, wenn wir die offizielle Veröffentlichung erreichen!
quelle
Ich habe diesen Fehler nach der Installation von .Net 4.7 Framework erhalten und mein Projekt in das Ziel .Net 4.7 geändert
ValueTuple ist jetzt in .Net 4.7 enthalten, sodass Sie das ValueTuple nicht mehr manuell referenzieren müssen.
Alles, was ich tun musste, um den Kompilierungsfehler zu korrigieren, war, den Verweis auf System.ValueTuple aus den Referenzen meines Projekts zu entfernen.
quelle
Ich bin auch auf dieses Problem gestoßen, als ich ein Upgrade von .NET 4.6.2 auf .NET 4.7.2 durchgeführt habe. Leider konnte ich den Paketverweis auf nicht entfernen,
System.ValueTuple
da ein anderes von mir verwendetes NuGet-Paket davon abhängt.Endlich konnte ich die Grundursache finden: Im Projektordner lag eine .NET 4.6.2-Version
mscorlib.dll
herum (Ausgabe eines Veröffentlichungsvorgangs), und MSBuild entschied sich, diese Assembly anstelle der offiziellen .NET 4.7.2-Referenz zu referenzieren Montage befindet sich inC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.Aufgrund der Tatsache, dass System.ValueTuple in .NET 4.7 eingeführt wurde, schlug MSBuild die Kompilierung fehl, da der Typ in der Referenzassembly von .NET 4.6.2 nicht gefunden werden konnte.
quelle
Ich habe diesen Fehler auch nach dem Update auf .NET 4.7.2 erhalten und konnte ihn beheben, indem ich Nuget-Pakete mit folgenden Komponenten neu installierte:
quelle