web-dev-qa-db-fra.com

Visual Studio disant que le nom n'existe pas dans le contexte actuel

J'appelle une méthode statique sur une classe comme

Foo.bar()

L’intellisense de Visual studio reconnaît Foo et la barre d’auto-complétion pour moi (elle met en évidence Foo et tout fonctionne normalement). Tout semble aller jusqu'à ce que je construise le projet, ce qui génère une erreur indiquant que le nom Foo n'existe pas dans le contexte actuel.

J'utilise cet appel de méthode statique dans d'autres fichiers, donc je sais que la classe va bien. La situation est trop lourde pour que nous puissions écrire du code, je recherche donc principalement des raisons qui pourraient faire en sorte que intellisense fonctionne normalement mais génère des erreurs de compilation de ce type. 

16
Jarrod Everett

Cela peut se produire lorsque des espaces de noms, des classes et des variables s'embrouillent lorsqu'ils portent le même nom. J'ai déjà souffert de cela auparavant. Intellisense m'a dit que j'avais raison, le compilateur m'a dit que j'avais tort! J'ai fait confiance au compilateur!

Vous avez 2 options que je peux penser

  1. Recherchez votre code pour Foo et voyez qu'il est utilisé pour autre chose que la classe statique.

  2. Qualifiez entièrement l'appel Foo.bar (). MyApplication.This.That.Foo.bar();

Faites-le dans cet ordre ... il est préférable de résoudre le problème avec élégance afin de pouvoir appeler Foo.bar () car il est plus lisible et maintenable que d'avoir MyApplication.This.That.Foo.bar(); partout!

9
series0ne

J'ai constaté cette erreur en raison de versions différentes du framework .NET dans les différents projets. La bibliothèque de classes que j'ai construite était 4.5 et l'application, 4.0, mais la seule erreur qu'elle a générée était des erreurs d'espace de noms. Changer la version de l'infrastructure sur la bibliothèque de classes et la reconstruire, puis l'application, a résolu l'erreur.

27
aherocalledFrog

Dans mon cas, il me manquait un } à la fin d'une des méthodes au milieu du code qui empêchait le programme de voir le reste du code et de se plaindre des méthodes que j'ai définies après ce point.

7
Mehrad

Je sais que c'est un sujet un peu ancien, mais je viens de vivre la même chose et pour moi c'était parce que le fichier n'était pas réellement inclus dans la solution.

Cela m'est bien arrivé parce que j'avais renommé la classe, puis le fichier, ce qui a permis à Visual Studio de toujours connaître la classe et l'espace de noms, mais le compilateur n'a pas obtenu le fichier car le fichier renommé n'était pas inclus. 

3
Allan S. Hansen

Ancien fil que je connais, mais j'ai rencontré ce problème lorsque j'ai référencé une méthode statique à partir d'un projet de test unitaire - IntelliSense a déclaré que la méthode était présente, mais lorsque j'ai essayé de créer/exécuter le test (en mode débogage), l'erreur "Le nom n'existe pas dans le contexte actuel". Afin de résoudre ce problème, j'ai dû reconstruire le projet contenant la méthode statique référencée dans la configuration Debug (il n'avait été construit que dans la configuration Release). Après cela, le test a été construit et a fonctionné correctement.

2
Donald McInnes

Pensez à effectuer un nettoyage puis un développement sur le projet avec le problème. Il est possible que l'éditeur et Intellisense découvrent correctement la classe, tandis que le compilateur fonctionne avec des fichiers obsolètes. (J'ai eu le même problème et c'est comme ça que je l'ai résolu.)

1
Michael

c’est un vieil article que je connais, mais je viens de rencontrer ce problème et cela m’énerve depuis quelques jours et j’y suis finalement arrivé: cliquez sur le fichier de classe dans l’Explorateur de solutions, puis regardez l’onglet Propriétés; assurez-vous que Build Action est réglé sur "Compile".

1
user1012598

Je rencontrais également ce problème en créant une couche d'accès aux données et des méthodes statiques appelées présentant les mêmes symptômes: Intellisense le trouvant mais pas le compilateur. J'ai essayé plusieurs des solutions ci-dessus, y compris la correction de la version .Net.

Lors de l'ajout des fichiers source au projet, j'ai également modifié l'espace de nom . Avec le fichier avec le problème, j'ai oublié de modifier l'espace de nom afin qu'il corresponde à sa date d'importation ultérieure.

0
William Biesty

Ma solution à ce problème qui se produit de temps en temps:

  1. Trouvez la classe qui vous pose des problèmes dans l'Explorateur de solutions et "Exclure du projet"
  2. Reconstruire cet assemblage (appelons-le "A")
  3. Le projet qui a utilisé le fichier ("B") vous demandera de "Recharger" le projet, attendez.
  4. Rajoutez le fichier dans l’assemblage A, que vous venez de supprimer, et reconstruisez-le.
  5. Maintenant, rechargez le projet B

Ensuite, le fichier a été trouvé dans VS et tout allait bien.

0
Ted

Fermer tous les onglets de MonoDevelop. Puis fermeture de MonoDevelop. Finalement, ouvrir à nouveau MonoDevelop a résolu le problème pour moi.

0
chelder

La mienne était une solution un peu plus compliquée. Projet A référencé projets B et C: les deux références avaient Copy Local sur true et les deux assemblys produisaient avec des noms identiques. Lors de la construction du projet de référencement, les assemblys de sortie des projets B et C ont été copiés et l'un écrasé, car ils avaient le même nom. VS était alors à la recherche des références dans le répertoire de construction et n'a trouvé que l'assemblage qui avait "gagné".

0
BKewl

Je me suis heurté à ce problème à quelques reprises et lorsque je le fais, la première chose à vérifier est de savoir si l’Assemblée non reconnue possède un paquet Nuget. Dans mes cas, ils ont toujours et j’ai simplement oublié d’installer les mêmes packages dans l’Assembly, dans lesquels figure la référence à l’Assemblée non reconnue. Une commande de reconstruction et le problème résolus. J'espère que ça aidera quelqu'un. Ce même message d'erreur peut être donné pour plusieurs choses, de sorte que ce cas particulier peut ne pas s'appliquer. Si vous n'avez pas utilisé Nuget, je vous suggérerais d'essayer les autres réponses. 

0
SimperT