Obtenir "le type ou le nom de l'espace de noms est introuvable" mais tout semble correct?


276

Je reçois un:

le nom du type ou de l'espace de noms est introuvable

erreur pour une application C # WPF dans VS2010. Cette zone de code se compilait bien, mais tout à coup, je reçois cette erreur. J'ai essayé de supprimer la référence du projet et l' usinginstruction, en fermant VS2010 et en redémarrant, mais j'ai toujours ce problème.

Des idées pourquoi cela pourrait se produire, où il semble que je fais la bonne chose concernant la référence et la usingdéclaration?

J'ai également noté dans VS2010 que l'intellisense pour cet espace de noms fonctionne correctement, il semble donc que VS2010 ait la référence du projet et voit l'espace de noms d'une part, mais pendant la compilation, ne le voit-il pas?


Cela peut fonctionner pour fermer et redémarrer Visual Studio. Il semble parfois être "bloqué"
Ris Adams

2
Conseils: 1) l'assembly chargé?, 2) l'assembly chargé correspond à l'assembly d'origine?, 3) "en utilisant" des directives pointant vers d'anciennes références ou aucune référence valide?, 4). dans toute la solution (chaque bibliothèque de classe et projet). 5) vérifier les paramètres du projet pour l'option de construction de la version du framework net (collaborer avec des équipes pour résoudre ce type de problème, vous devez accepter la version du framework net. Build des deux côtés) à la bibliothèque de projet / classe de destination. Je devrais travailler!
Felix Aballi

Vérifiez si vous avez référencé la DLL. La DLL est située dans le dossier bin de votre répertoire de solutions.
Abhishek Poojary

Réponses:


471

Cela peut être le résultat d'une incompatibilité de version du framework .Net entre deux projets.

Cela peut se produire de deux manières:

  1. un projet de profil client référençant un projet cadre complet; ou
  2. une version de framework plus ancienne ciblant une version de framework plus récente

Par exemple, cela se produit lorsqu'une application est définie pour cibler le framework de profil client .Net 4 et que le projet auquel elle fait référence cible le framework .Net 4 complet.

Donc, pour que ce soit plus clair:

  • Le projet A cible le cadre du profil client
  • Le projet A fait référence au projet B
  • Le projet B cible le cadre complet

La solution dans ce cas consiste soit à mettre à niveau la cible de framework de l'application (projet A), soit à rétrograder la cible de l'assembly référencé (projet B). Il est correct pour une application de framework complet de référencer / consommer un assembly de framework de profil client, mais pas l'inverse (le profil client ne peut pas faire référence à un assembly ciblé de framework complet).

Notez que vous pouvez également obtenir cette erreur lorsque vous créez un nouveau projet dans VS2012 ou VS2013 (qui utilise .Net 4.5 comme infrastructure par défaut) et:

  • le ou les projets de référence utilisent .Net 4.0 (cela est courant lorsque vous avez migré de VS2010 vers VS2012 ou VS2013 et que vous ajoutez ensuite un nouveau projet)

  • les projets référencés utilisent une version supérieure, c'est-à-dire 4.5.1 ou 4.5.3 (vous avez redirigé vos projets existants vers la dernière version, mais VS crée toujours de nouveaux projets ciblant la v4.5, et vous référencez ensuite ces anciens projets à partir du nouveau projet)


2
excellent - cela a fonctionné - j'ai dû mettre à niveau mon client d'application WPF pour utiliser l'intégralité du .NET Framework 4. Vous ne savez pas quel impact cela aura sur l'empreinte du client? J'ai essayé de rétrograder la bibliothèque que j'ai vers le profil client .Net 4 mais quand j'ai fait cela, il y avait des problèmes similaires avec la récente bibliothèque tierce Quartz.net que je venais de commencer à utiliser. Il semble donc que l'utilisation de Quartz.net dans mon projet de bibliothèque m'oblige finalement à utiliser le framework .Net 4 complet dans mon application UI WPF.
Greg

3
Merci - cela a aidé tout à l'heure. J'ai récemment déplacé la solution vers VS2012 à partir de VS2010, et j'avais créé une nouvelle bibliothèque de classes dans VS2012. Tout à coup, j'ai eu cette erreur, et bien sûr, c'était parce que la nouvelle bibliothèque de classes ciblait .NET 4.5 tandis que le projet qui la référencait ciblait .NET 4.0. La rétrogradation de la nouvelle bibliothèque vers la cible 4.0 l'a corrigée.
Richard

22
Ce serait vraiment bien si Visual Studio vous donnait une sorte d'indice à ce sujet!
Jason Coyne

3
Bien que cette réponse donne une excellente description de ce qui doit être fait ... elle n'a aucune suggestion sur la façon de le faire, ce qui serait un bon ajout
Jon Story

1
Même les meilleurs d'entre nous n'ont parfois jamais eu besoin de faire certaines tâches. Je ne sais pas comment je n'ai jamais eu besoin de changer le cadre et même si je l'ai maintenant trouvé, cela ne m'était pas venu à l'esprit auparavant. Ce n'est pas un facteur de rupture pour la réponse, juste que je trouve que les meilleures réponses agissent comme un guichet unique pour `` décrire le problème, énoncer la solution, montrer comment le résoudre ''
Jon Story

50

La réinstallation des paquets nuget a fait l'affaire pour moi. Après avoir modifié les versions de .NET Framework pour qu'elles soient synchronisées pour tous les projets, certains packages de nuget (en particulier Entity Framework) étaient toujours installés pour les versions précédentes. Cette commande dans la console du Gestionnaire de packages réinstalle les packages pour l'ensemble de la solution:

Update-Package reinstall

Le problème que j'ai rencontré était que j'ai créé une nouvelle solution, que j'ai ajouté une version différente d'un package Nuget, que d'autres sont utilisées. Ensuite, lorsque j'ai couru, Update-Package -reinstallj'ai eu plusieurs erreurs dans toute la solution, qui comprenait une version différente de ce package. J'ai mis à jour en tout, puis il a finalement fonctionné. Il a également corrigé les références dans les fichiers package.json de 45 à 452, car j'ai également changé la version cible il y a longtemps.
Ádám Kovács

A fonctionné pour moi et j'ai dû supprimer Sytems.Net.Http des références lors de la rétrogradation
Binil Anto

1
C'est aussi ce qui a fonctionné pour moi. A exécuté la commande, puis annulé les modifications en attente et mon sln était revenu à la normale
foremaro

Cela a fonctionné pour moi, il m'a montré une référence qui n'était pas prise en charge avec mon framework actuel
Adleri

cela a fonctionné pour moi et l'erreur qui a disparu était totalement indépendante de tout paquet nuget installé.
CAD bloke

31

Je ne sais pas pourquoi cela a fonctionné, mais j'ai supprimé la référence de projet que VS2015 me disait qu'il ne pouvait pas trouver et l'ai ajoutée à nouveau. Résolu le problème. J'avais essayé de nettoyer, de construire et de redémarrer VS en vain.


Je recommande vivement cette astuce lorsque vous trouvez un problème de référencement dans une solution VS. Il a résolu mon problème dans VS2017 après avoir ajouté un nouveau projet ciblant une version supérieure du framework .NET. Je parie que la mise en cache a été effacée.
themefield

1
Idem ici: c'est ce qui a aidé (je n'ai pas eu non plus les autres problèmes de version). J'ai reçu des messages d'erreur pour chaque fichier ouvert, jusqu'à 400+ ... bien que la construction / l'exécution ne soit pas un problème. Aussi: l'analyse à l'échelle de la solution de ReSharper a également montré les mêmes erreurs.
Mike

M'a également aidé cette astuce. N'avait même pas de différences de version cible. La construction était possible, Rider n'a montré aucun problème mais VS a continué à insister pour que toutes les références du projet manquent ...
Daniel Lerps

Le compilateur compile en fonction de l'ordre de génération du projet, donc s'il y a une erreur réelle dans un projet, il peut se perdre dans une mer d'erreurs de type ou d'espace de nommage introuvable - car il se ferme simplement lorsqu'il trouve le erreur, et ne parvient pas à mettre à jour les références. S'il n'y a pas trop d'erreurs répertoriées, vous devriez pouvoir trouver la véritable erreur. Malheureusement, il y en avait des centaines pour moi, donc cette astuce m'a vraiment aidé. Je suppose qu'intelisense ne se soucie pas de l'ordre de construction et compile juste les projets individuellement, et c'est pourquoi vous n'obtenez pas d'erreurs intelisense.
Kev

29

Lors de la création de la solution, j'obtenais la même erreur (le type ou l'espace de noms '' est introuvable). En dessous, j'ai vu un avertissement indiquant que "la référence n'a pas pu être résolue" et pour m'assurer que "l'assemblage existe sur le disque".

J'étais très confus, car ma DLL était très clairement à l'emplacement vers lequel la référence pointait. VS n'a pas semblé mettre en évidence d'erreurs, jusqu'à ce que j'essaie de construire la solution.

J'ai finalement réalisé le problème (ou du moins ce que je soupçonne être le problème). Je construisais le fichier de bibliothèque dans la même solution. Donc, même s'il existait sur le disque, il était en cours de reconstruction à cet emplacement (d'une manière ou d'une autre dans le processus de reconstruction de la bibliothèque mon autre projet - dans la même solution - qui faisait référence à la bibliothèque doit avoir décidé que la bibliothèque n'existait pas)

Lorsque j'ai cliqué avec le bouton droit sur le projet et créé cela uniquement, au lieu de la solution entière, je n'ai pas eu l'erreur.

Pour résoudre ce problème, j'ai ajouté la bibliothèque en tant que dépendance au projet qui l'utilisait.

Pour faire ça:

  1. J'ai fait un clic droit sur ma solution dans l'explorateur de solutions et j'ai sélectionné "Propriétés"
  2. Ensuite, dans "Propriétés communes", j'ai sélectionné "Dépendances du projet".
  3. Ensuite, dans le menu déroulant Projets, j'ai sélectionné le projet qui dépendait de la bibliothèque, et
  4. Coché la case à côté de la bibliothèque trouvée sous "Dépend de"

Cela garantit que le projet de bibliothèque est construit en premier.


2
Merci pour l'astuce pour consulter les avertissements. Mon problème était que mon projet de test devait installer le package NuGet pour Bcl car mon projet principal le référençait.
Kim

Merci! Cela m'a incité à trouver le problème que je rencontrais. Il s'avère que j'avais deux références au projet de dépendance, et celui qui avait la priorité était une DLL précédemment construite dans le dossier bin. J'ai supprimé la DLL et la référence escroc et j'ai fait une reconstruction, tout a ensuite été compilé correctement.
Chris Davis

7

Je vérifierais d'abord que les informations générées par votre projet ne sont pas corrompues. Faites un nettoyage et reconstruisez votre solution.

Si cela n'aide pas, une chose que j'ai vue dans le passé pour les problèmes de concepteur est d'ouvrir un projet Windows Forms, puis de le refermer. C'est un peu de poulet-entrailles-ish, cependant, ne retenez pas votre souffle.


J'avais essayé de nettoyer et de reconstruire votre solution mais pas de chance. J'ai essayé de supprimer / ajouter / nettoyer / reconstruire uniquement le projet d'application WPF et toujours pas de chance aussi. :(
Greg

Un nettoyage suivi d'une reconstruction a résolu le problème. Cependant, ce problème apparaît tous les jours. Au moins, je peux faire avancer mes affaires jusqu'à ce que je trie complètement.
Valamas

5

J'ai rencontré une situation plus délicate: le premier projet cible le framework complet 4.0 avec le Microsoft.Bcl.Asyncpackage installé. Project Two cible le framework complet 4.0 mais ne compilerait pas lors de la référence à une classe Project One.

Une fois que j'ai installé le package Async NuGet sur le deuxième projet, il s'est correctement compilé.


1
Ah merci pour ça. Mon projet portable se compilait bien sur Xamarin Studio alors qu'il échouait sur Visual Studio à cause de cela. Je pense que XS fait un peu de «magie» pour le laisser se compiler lorsque des références implicites sont manquantes.
Nicola Iarocci

5

Dans mon cas, je trouve que la référence dans le VisualStudio a un triangle et un point d'exclamation comme cette image,

puis, je clique avec le bouton droit sur le supprimer et ajoute à nouveau la référence dll correctement, le problème a été résolu.


4

Celui-ci a fonctionné pour moi. Dans votre classe, où le nom de classe est défini, par exemple: Classe publique ABC, supprimez un caractère et attendez un peu. Votre liste d'erreurs augmentera car vous avez changé le nom. Remettez maintenant le caractère que vous avez tapé. Cela a fonctionné pour moi, j'espère que cela fonctionnera aussi pour vous. Bonne chance!!!


4

J'ai eu un problème similaire: le compilateur n'a pas pu détecter un dossier dans le même projet , donc une directive using reliant à ce dossier a généré une erreur. Dans mon cas, le problème provenait de renommer le dossier . Même si j'ai mis à jour l'espace de noms de toutes les classes à l'intérieur de ce dossier, les informations sur le projet n'ont pas réussi à se mettre à jour. J'ai tout essayé: supprimer le fichier .suo et les dossiers bin et obj, nettoyer la solution, recharger le projet - rien n'y fait. J'ai résolu le problème en supprimant le dossier et les classes à l'intérieur, en créant un nouveau dossier et en créant de nouvelles classes dans ce nouveau dossier (simplement déplacer les classes à l'intérieur du nouveau dossier n'a pas aidé).

PS: Dans mon cas, je travaillais sur une application Web, mais ce problème peut se produire dans différents types de projets.


3

[Facepalm] Mon problème était que j'avais ajouté la dépendance dans la façon de faire C ++.

Accédez au projet qui ne sera pas généré, ouvrez le dossier «Références» dans l'Explorateur de solutions et voyez si votre dépendance est répertoriée.

Sinon, vous pouvez 'Ajouter une référence' et choisir la dépendance dans l'onglet Projets.

Boom Shankar.


2

Nous avons eu un cas étrange de cela que je viens de corriger dans une solution. Il y avait un caractère caché / espace devant une instruction "using" dans le projet principal. Ce projet se développerait bien et le site Web fonctionnait bien, mais le projet de test unitaire qui y faisait référence ne pouvait pas être construit.


2

J'ai rencontré ce problème lors de la mise à niveau des projets existants de VS2008 vers VS2012. J'ai trouvé que deux projets (les deux seuls que j'ai créés) ciblaient différents cadres .Net (3.5 et 4.0). J'ai résolu ce problème dans l'onglet Application des projets en m'assurant que les deux projets avaient «.NET Framework 4» dans la zone Framework cible.


2

J'ai eu les mêmes erreurs, mon histoire était la suivante: après une mauvaise fusion (via git), l'un de mes fichiers .csproj avait des compileentrées en double comme:

<Compile Include="Clients\Tree.cs" />
<Compile Include="Clients\Car.cs" />
<Compile Include="Clients\Tree.cs" />        //it's a duplicate

Si vous avez une grande solution et plus de 300 messages dans la fenêtre des erreurs, il est difficile de détecter ce problème. J'ai donc ouvert le fichier .csproj endommagé via le bloc-notes et supprimé les entrées en double. A travaillé dans mon cas.


1
J'ai eu un problème similaire avec une mauvaise fusion dans VS 2019. Le projet a été compilé avec succès, mais pas la solution. Il y avait en fait une erreur pour ce projet (très étrange). Il échouait en raison d'un fichier supplémentaire référencé qui avait été précédemment supprimé, mais ré-ajouté à partir d'une fusion. J'ai supprimé le fichier, nettoyé le fichier .csproj, reconstruit et toutes les références ont recommencé à fonctionner.
Cryptc

2

J'ai eu le même problème que celui discuté: VS 2017 souligne une classe dans le projet référencé comme une erreur mais la solution fonctionne correctement et même l'intellisense fonctionne.

Voici comment j'ai réussi à résoudre ce problème:

  1. Déchargez le projet référencé
  2. Ouvrez le fichier .proj dans VS (je cherchais des doublons comme quelqu'un l'a suggéré ici)
  3. Recharger à nouveau le projet (je n'ai pas modifié ni même enregistré le fichier proj car je n'ai pas de doublons)

1

Vous pouvez également essayer d' éliminer le code que vous pensez que vous avez des problèmes avec et voir si elle compile sans références à ce code. Sinon, corrigez les choses jusqu'à ce qu'il se compile à nouveau, puis réintégrez votre code de problème suspect . Parfois, j'obtiens des erreurs étranges sur les classes ou les méthodes que je connais sont correctes lorsque le compilateur n'aime pas autre chose. Une fois que j'ai résolu le problème auquel il est vraiment accroché, ces erreurs «fantômes» disparaissent.


1

Je sais que c'est donner un coup de pied à un cheval mort mais j'ai eu cette erreur et les cadres étaient bien. Mon problème était essentiellement de dire qu'une interface ne pouvait pas être trouvée, mais elle se construisait et accédait très bien. Alors je me suis mis à penser: "Pourquoi cette interface quand les autres fonctionnent bien?"

Il s'est avéré que j'accédais à un service à l'aide de WCF avec une interface de point de terminaison qui utilisait Entity Version 6 et que le reste des projets utilisaient la version 5. Au lieu d'utiliser NuGet, j'ai simplement copié les packages de nuget dans un référentiel local pour les réutiliser et les a énumérés différemment.

par exemple EntityFramework6.dll contre EntityFramework.dll .

J'ai ensuite ajouté les références au projet client et pouf, mon erreur a disparu. Je me rends compte que c'est un cas limite car la plupart des gens ne mélangeront pas les versions d'Entity Framework.


1

Ajouter ma solution au mix car c'était un peu différent et ça m'a pris du temps à comprendre.

Dans mon cas, j'ai ajouté une nouvelle classe à un projet, mais comme mes liaisons de contrôle de version n'étaient pas définies, j'avais besoin de rendre le fichier accessible en écriture en dehors de Visual Studio (via le VC). J'avais annulé la sauvegarde dans Visual Studio, mais après avoir rendu le fichier accessible en écriture en dehors de VS, j'ai à nouveau appuyé sur Enregistrer tout dans VS. Par inadvertance, le nouveau fichier de classe n'a pas été enregistré dans le projet .. cependant..Intellisense l'a toujours affiché comme bleu et valide dans les projets de référence même si, lorsque j'essayais de recompiler, le fichier n'était pas trouvé et obtenait le erreur de type introuvable. La fermeture et l'ouverture de Visual Studio montraient toujours le problème (mais si j'avais pris note que le fichier de classe manquait à la réouverture).

Une fois que j'ai réalisé cela, la correction était simple: avec le fichier de projet défini en écriture, j'ai lu le fichier manquant dans le projet. Tout va bien maintenant.


1

J'ai eu le même problème. Une nuit, mon projet compilerait les ERREURS du lendemain matin!.

J'ai finalement découvert que Visual Studio avait décidé de "modifier" certaines de mes références et de les pointer ailleurs. par exemple:

System.ComponentModel.ISupportInitialize est devenu en quelque sorte "blahblah.System.ComponentModel.ISupportInitialize"

Une chose assez grossière pour vs à faire si vous comme moi


1

Cet événement se produit dans Visual Studio 2017.

  1. Redémarrez Visual Studio
  2. Projet propre qui ne parvient pas à construire.
  3. Reconstruisez le projet.

1

Mon cas était le même que celui discuté ici, mais rien ne l'a résolu jusqu'à ce que j'aie supprimé la System.Coreréférence de la liste des références (Tout fonctionnait bien sans)

j'espère que cela aidera quelqu'un parce que ce problème est assez frustrant


C'était exactement le problème pour moi. J'ai supprimé System.Core et reconstruit, les erreurs se sont résolues immédiatement. Merci
mille fois de

1

Pour résoudre ce problème, il peut également aider à supprimer et recréer le *.sln.DotSettingsfichier de la solution associée.


1

Dans mon cas, j'avais une classe qui était répertoriée dans le dossier source approprié, mais ne s'inscrivait pas dans l'Explorateur de solutions. Je devais faire un clic droit sur le projet> Ajouter un élément existant et sélectionner manuellement cette classe, il a dit qu'il manquait. Ensuite, tout a bien fonctionné!


1

Dans mon cas, le problème était qu'après avoir changé l'espace de noms pour qu'il soit exactement le même que dans un autre projet (intentionnellement), le nom de l'assembly a également été modifié par VS, donc il y avait deux assemblys avec le même nom, l'un remplaçant l'autre


Où puis-je modifier le nom de l'assemblage pour le remplacer par le bon nom?
Matt123

1
dans le fichier projet (.csproj) manuellement ou par un clic droit sur le projet -> Propriétés
user1121956

0

Dans mon cas, j'avais un fichier construit par une dépendance externe (xsd2code) et en quelque sorte ses fichiers designer.cs n'étaient pas traités correctement par VS. Créer un nouveau fichier dans Visual Studio et y coller le code a fait l'affaire pour moi.


0

Pour tous ceux qui obtiennent cette erreur lorsqu'ils essaient de publier leur site Web sur Azure, aucune des solutions prometteuses ci-dessus ne m'a aidé. J'étais dans le même bateau - ma solution a bien fonctionné d'elle-même. J'ai fini par devoir

  1. Supprimez tous les packages nuget dans ma solution.
  2. Fermez et rouvrez ma solution.
  3. Ajoutez à nouveau tous les packages nuget.

Un peu pénible, mais c'était le seul moyen pour que mon site Web soit publié sur Azure.


0

J'ai eu cette erreur en essayant de créer une build avec une build Visual Studio Team Services exécutée sur ma machine locale en tant qu'agent.

Cela a très bien fonctionné dans mon espace de travail normal et j'ai pu ouvrir le fichier SLN dans le dossier de l'agent localement et tout s'est bien compilé.

La DLL en question a été stockée dans le projet en tant que Lib/MyDLL.DLLet fait référence à cela dans le fichier csproj:

<Reference Include="MYDLL, Version=2009.0.0.0, Culture=neutral, PublicKeyToken=b734e31dca085caa">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>Lib\MYDLL.dll</HintPath>
</Reference>

Il s'est avéré qu'il ne trouvait littéralement pas le fichier malgré le chemin d'accès. Je pense que msbuild cherchait peut-être par rapport au fichier SLN au lieu du fichier de projet.

Dans tous les cas, si le message que vous obtenez est Could not resolve this reference. Could not locate the assemblyalors assurez-vous que la DLL se trouve dans un emplacement accessible à msbuild.

J'ai en quelque sorte triché et j'ai trouvé un message qui disait Considered "Reference\bin\xxx.dll"et j'ai juste copié les DLL à la place.


0

Dans mon cas, l'ajout de la DLL comme référence a donné l' type or namespace name could not be founderreur. Cependant, copier et coller le fichier dll directement dans le dossier bin a résolu l'erreur.

Je ne sais pas pourquoi cela a fonctionné.


0

Je sais que ce thread est ancien mais de toute façon je partage, je dois installer toutes les dépendances de tiers de l'assembly importé - car l'assembly importé n'était pas inclus en tant que package Nuget, donc ses dépendances étaient manquantes.

Hop cette aide :)


0

Dans mon cas, j'avais deux projets dans une solution, j'ai ajouté un sous-espace de noms dans le projet référencé, mais lors de la construction, je n'ai pas remarqué que la construction du projet référencé a échoué et il a utilisé la dernière version construite avec succès qui n'a pas avoir ce nouvel espace de noms, donc l'erreur était correcte, qu'il ne peut pas être trouvé, car il n'existait pas La solution était évidemment de corriger les erreurs dans le projet référencé.


0

Je travaillais sur l'édition communautaire VS 2017 et j'ai eu le même problème avec les packages de pépites CefSharp.

Les packages ont été téléchargés et restaurés avec succès, le projet a pu être construit et exécuté avec succès - seul le balisage a indiqué que les espaces de noms n'étaient pas reconnus.

Tout ce que j'avais à faire était d'ouvrir la Referencessection et de cliquer sur l'un des panneaux d'exclamation jaunes.

entrez la description de l'image ici

Après quelques secondes, les erreurs de balisage ont disparu.

entrez la description de l'image ici


Je pense que vous constaterez que cela ne fonctionne que si le panneau Propriétés est ouvert (cliquez avec le bouton droit sur une référence problématique et choisissez Propriétés.) Maintenant, quelqu'un peut-il expliquer pourquoi cela fonctionne?
Qwertie
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.