Type prédéfini 'Système.ValueTuple2 n'est pas défini ou importés
J'ai installé Visual Studio 15 Aperçu 3 et essayé d'utiliser le nouveau tuple fonction
static void Main(string[] args)
{
var x = DoSomething();
Console.WriteLine(x.x);
}
static (int x, int y) DoSomething()
{
return (1, 2);
}
Quand je compile j'obtiens l'erreur:
Prédéfinis de type 'System.ValueTuple2 n'est pas défini ou importés
Selon le blog, cette fonctionnalité devrait être "sur" par défaut.
Qu'ai-je fait de mal?
- Personne ne sait si le package NuGet est obligatoire, même en 2017 RTM ciblage 4.6.2? Il semble que vous avez encore besoin d'elle et j'attend de vous que vous ne serait pas dans la version finale.
- vous pouvez essayer d'utiliser le Système.Tuple<int, int> au lieu de cela
- Pour moi ce stackoverflow.com/a/46533630/4383425 a la solution.
Vous devez vous connecter pour publier un commentaire.
Pour .NET 4.6.2 ou inférieur .NET de Base 1.x, et .NET Standard 1.x, vous devez installer le package NuGet
System.ValueTuple
:Ou à l'aide d'un package de référence dans VS 2017:
.NET Framework 4.7, .NET Core 2.0, et .NET Standard 2.0 inclure ces types.
Il fait partie de la
.NET Framework 4.7
.Aussi longtemps que vous ne ciblez pas le cadre ci-dessus ou supérieur (ou
.NET Core 2.0
/.NET Standard 2.0
), vous aurez besoin de faire référence àValueTuple
. Le faire en ajoutant leSystem.ValueTuple
NuGet Package
System.ValueTuple`2
pas trouvédefault
et tout fonctionne.La ValueTuple types sont intégrés dans les cadres plus récents:
Jusqu'à ce que vous la cible de l'un de ces nouveaux cadre de versions, vous avez besoin de faire référence à la ValueTuple paquet.
Plus de détails à http://blog.monstuff.com/archives/2017/03/valuetuple-availability.html
Pour Code de Visual Studio utiliser le construit en Terminal et de l'exécution:
N'oubliez pas d'exécuter
dotnet restore
par la suite.Assurez-vous d'avoir .NET 4.6.2 Developer Pack pour VS installé et puis tirez
System.ValueTuple
paquet de NuGet.Dans le cas où d'autres ont le même problème, je suis tombé sur cette erreur après la mise à jour d'un projet de 4.7. Curieusement, j'ai dû enlever le Système.ValueTuple de référence pour cette erreur de s'en aller.
J'ai eu à vérifier System.ValueTuple.dll fichier sous contrôle de code source et de corriger ses références dans .cssproj fichiers:
< Référence Incluent="le Système de.ValueTuple" >
< HintPath >
....\ProjectName\ProjectName\obj\Release\Package\PackageTmp\bin\System.ValueTuple.dll
< /HintPath >
< /Référence >
en
< Référence Incluent="le Système de.ValueTuple" >
< HintPath >
..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll
< /HintPath >
< /Référence >
(Facultatif): 7. résoudre les mêmes problèmes avec l'autre .dll fichiers de cette façon
Je ne vous conseille pas d'ajouter
ValueTuple
comme un paquet de référence pour l' .net Framework projets. Comme vous le savez, cette assemblée est disponible à partir de 4.7 .NET Framework.Il peut y avoir certaines situations que votre projet va essayer de comprendre à tout prix
ValueTuple
de .NET Framework dossier de lieu de dossier de package et il peut causer certains assemblée de ne pas trouvé des erreurs.Nous avons eu ce problème aujourd'hui dans la société. Nous avons eu de la solution avec 2 projets (je risque de trop simplifier qu') :
Lib
Web
Lib
a été notamment ValueTuple etWeb
a l'aide deLib
. Il s'est avéré que, par une raison inconnueWeb
lorsque vous tentez de résoudre chemin àValueTuple
avaitHintPath
dans .NET Framework répertoire et prenait une version incorrecte. Notre application a été s'écraser à cause de cela.ValueTuple
n'a pas été défini dans.csproj
deWeb
niHintPath
pour cette assemblée. Le problème était très bizarre. Normalement, il copie le montage de dossier de package. Ce temps n'était pas normal.Pour moi, c'est toujours un risque pour ajouter
System.*
paquet de références. Ils sont souvent comme le temps de la bombe. Ils sont très bien au début et ils peuvent exploser dans votre visage dans le pire moment. Ma règle d'or: Ne pas utiliserSystem.*
package Nuget pour .NET Framework si il n'y a pas de réel besoin d'eux.Nous avons résolu notre problème en ajoutant manuellement
ValueTuple
en.csproj
fichier.