J'ai installé Visual Studio 2017 Community qui a été publié il y a une semaine et j'ai commencé à explorer les nouvelles fonctionnalités de C # 7.
J'ai donc créé une méthode simple qui renvoie deux valeurs:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
Le compilateur génère une erreur:
Erreur CS8137 Impossible de définir une classe ou un membre qui utilise des tuples car le type requis par le compilateur «System.Runtime.CompilerServices.TupleElementNamesAttribute» est introuvable. Vous manquez une référence?
J'ai essayé de trouver une référence dans le cadre avec ce nom, mais sans succès!
Si nous avons besoin de choses supplémentaires pour utiliser les fonctionnalités de C # 7.0, alors il est très étrange que nous devions le faire pour chaque projet?!
c#
.net
visual-studio
visual-studio-2017
c#-7.0
Zein Makki
la source
la source
Réponses:
Je viens de parcourir cette page sur Roslyn qui décrit les étapes suivantes pour que cela fonctionne:
System.ValueTuple
package de NuGet (pré-version)Suite à ces étapes, il fonctionne maintenant. Mais c'est vraiment très étrange que nous devions faire cela pour chaque projet que nous commençons! J'espère que cela sera corrigé lorsque nous atteindrons la version officielle!
la source
J'ai commencé à recevoir cette erreur après avoir installé .Net 4.7 Framework et changé mon projet pour cibler .Net 4.7
ValueTuple est maintenant inclus avec .Net 4.7, vous n'avez donc pas besoin de référencer le ValueTuple manuellement.
Tout ce que j'avais à faire pour corriger l'erreur de compilation était de supprimer la référence à System.ValueTuple des références de mon projet.
la source
J'ai également rencontré ce problème lors de la mise à niveau de .NET 4.6.2 vers .NET 4.7.2. Malheureusement, je n'ai pas pu supprimer la référence au package
System.ValueTuple
car un autre package NuGet que j'utilise en dépend.Enfin, j'ai pu localiser la cause principale: il y avait une version .NET 4.6.2 de
mscorlib.dll
traîner dans le dossier du projet (sortie d'une opération de publication) et MSBuild a décidé de référencer cet assembly au lieu de la référence officielle .NET 4.7.2 ensemble situé dansC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.En raison du fait que System.ValueTuple a été introduit dans .NET 4.7, MSBuild a échoué la compilation car il n'a pas pu trouver le type dans l'assembly de référence de .NET 4.6.2.
la source
J'ai également eu cette erreur après la mise à jour vers .NET 4.7.2 et j'ai pu la corriger en réinstallant les packages nuget en utilisant:
la source