Le nom n'existe pas dans l'erreur d'espace de noms en XAML


126

Utilisation de VS2012 travaillant sur une application VB.NET WPF. J'ai une application de didacticiel MusicPlayer simple que j'utilise pour apprendre WPF. Je suis en train de convertir une version C # du didacticiel en VB.NET étape par étape.

Il a 2 classes dans l'application qui sont toutes les deux sous le même espace de noms. Je suis capable de référencer l'espace de noms dans le XAML, mais lorsque j'essaie de référencer l'objet de classe en XAML, j'obtiens une erreur et je ne peux pas compiler.

La chose étrange est que l'IntelliSense fonctionne très bien avec à la fois le référencement de l'espace de noms via la balise xmlns: c = et également lors de la saisie de l'objet de classe en utilisant <c: Mais l'objet est souligné et des erreurs sont générées en essayant de construire ou de travailler dans le concepteur.

Les fichiers de classe .vb se trouvent dans un dossier appelé \ Controls. L'espace de noms racine du projet principal est laissé vide intentionnellement. La classe est codée comme ceci ...

Namespace MusicPlayer.Controls
    Public Class UpdatingMediaElement
       .... code here
    End Public
End Namespace

Le xaml ressemble à ceci

(espace de noms défini dans la <Window >balise

xmlns:c="clr-namespace:MusicPlayer.Controls"

(objet défini en a <Grid>)

  <c:UpdatingMediaElement Name="MyMediaElement" />

(erreur affichée) Le nom "UpdatingMediaElement" n'existe pas dans l'espace de noms "clr-namespace: MusicPlayer.Controls".

Vous ne savez pas ce qui ne va pas ou comment y remédier?


13
Le redémarrage du visuel a fonctionné pour moi. (ne sous-estimez jamais la puissance du redémarrage)
Falaque

1
Un peu d'aide pour ceux qui sont aux prises avec cela: assurez-vous que votre classe est publique.
Borzh

Réponses:


234

Lorsque vous écrivez votre code wpf et VS indiquent que "Le nom ABCDE n'existe pas dans l'espace de noms clr-namespace: ABC". Mais vous pouvez totalement construire votre projet avec succès, il n'y a qu'un petit inconvénient car vous ne pouvez pas voir la conception de l'interface utilisateur (ou voulez simplement nettoyer le code).

Essayez de faire ceci:

  • Dans VS, faites un clic droit sur votre solution -> Propriétés -> Propriétés de configuration

  • Une nouvelle boîte de dialogue s'ouvre, essayez de changer les configurations du projet de Debug à Release ou vice versa.

Après cela, reconstruisez votre solution. Cela peut résoudre votre problème.


4
Cela se produit toujours dans Visual Studio 2015 Update 1. Votre solution a fonctionné - merci!
Simon Smith

4
Peut-être pas, mais j'ai trouvé que le simple basculement entre les modes Debug et Release sur la barre d'outils fonctionnait malgré tout.
ketura

35
Confirmé sur VS 2017 version 15.2 (26430.15) en juillet 2017. Simplement changé dans la liste déroulante de Debug à Release, compilé et l'erreur a disparu, changé et compilé et l'erreur a toujours disparu.
Tedd Hansen

7
Il semble que VS17 est particulièrement têtu - J'ai essayé de changer Rel / Dbg, de changer x64 / x86, de supprimer les dossiers ShadowCache, ComponentCache, Bin / Obj, ont toujours des "erreurs" et le concepteur ne fonctionne pas pour cette très petite application (d'autres applications avec comme 50 vues WPF fonctionnent bien). Arrivé soudainement et ne peut pas partir. J'ai eu ce problème avant plusieurs fois, mais la première fois sur VS17 et je ne peux pas le réparer maintenant. Pourtant, c'est la meilleure réponse car cela a fonctionné tant de fois auparavant.
bokibeg

7
J'adore la façon dont je reviens à cette réponse, et je l'ai déjà votée pour ... il y a 2,5 ans.
Mathieu Guindon

51

Si l'assembly est différent de l'espace de noms dans lequel votre classe est contenue, vous devez le spécifier explicitement.

ex:-

xmlns:Local="clr-namespace:MusicPlayer.Controls;assembly=MusicPlayer"

1
Bien que cela semble avoir résolu mon problème au début, il génère toujours la même erreur. Cependant, maintenant je ne suis même plus en mesure de créer la solution.
Bouke

6
@bouke Nettoyez la solution et reconstruisez-la
Vasanth Sriram

Génial, merci. Cela a vraiment aidé
Keith

Cela l'a fait pour moi. La chose étrange est que les convertisseurs étaient dans le même assemblage que le fichier xaml ... Mais ils étaient sur un espace de noms différent.
Jonathan Alfaro

Merci, l'assemblage manquait.
Teroneko le

31

J'ai vu ce problème disparaître en effaçant le cache Xaml Design Shadow. J'ai eu le problème avec Visual Studio 2015 Update 1.

Dans Visual Studio 2015, le cache se trouve ici:

%localappdata%\Microsoft\VisualStudio\14.0\Designer\ShadowCache

Processus:

  1. Cliquez avec le bouton droit sur la solution dans l'Explorateur de solutions et choisissez «Nettoyer la solution»
  2. Arrêter Visual Studio
  3. Supprimer le dossier ShadowCache
  4. Rouvrir le projet Visual Studio
  5. Reconstruisez la solution

Et voila plus d'erreurs d'espace de noms.


7
Malheureusement, cela n'a rien changé, pour moi. Toujours aux prises avec ce problème après presque un an. : /
Khale_Kitha

3
Merci! Cela a fini par fonctionner pour moi. C'est triste de voir que ces astuces sont toujours nécessaires dans VS15
Ocab19

4
Vous pouvez utiliser% localappdata% \ Microsoft \ VisualStudio \ 14.0 \ Designer \ pour aller immédiatement dans le bon dossier
Maxence

1
Avoir un concepteur qui ne fonctionne que si vous créez la solution est terrible. Imaginez dire à un concepteur automobile de construire la voiture entière avant de voir le design.
Paul McCarthy

26

Dans mon cas, c'était à cause d' autres erreurs de compilation . Lorsque d'autres erreurs ont été résolues, cette erreur apparemment liée a également été supprimée de la liste. En particulier les erreurs en bas de la liste des erreurs et sur les pages que vous avez récemment modifiées.

Alors ne faites pas attention directement à cette erreur et concentrez-vous d'abord sur d' autres erreurs .


2
Notez que faire une compilation / compilation a résolu ce problème pour moi, même si je n'ai pas eu d'autres erreurs de compilation non liées. On dirait que les fenêtres XAML ne sont pas toujours conscientes des nouvelles classes tant que vous n'avez pas effectué une compilation.
HK1

1
C'était le meilleur conseil pour moi, mais comme @ HK1, il n'y a parfois pas d'autres entrées dans la liste des erreurs du compilateur ... il n'y a pas d'erreurs dans la liste mais il y a d'autres erreurs. Pour les voir, commentez ou supprimez les lignes marquées avec l'erreur d'espace de noms, compilez à nouveau et vous verrez les autres erreurs du compilateur. Modifiez-les, et les lignes avant marquées avec l'erreur d'espace de noms seront correctes lorsque vous les restaurerez.
SERWare

J'avais supprimé une méthode dans le code derrière qui était toujours référencée en XAML. Une fois que j'ai supprimé la référence, cette erreur a disparu.
YarsRevenge13

23

Essayez de changer la plate-forme cible de construction en x86 et de créer le projet.

J'ai remarqué via Subversion que j'avais apparemment changé la cible de la plate-forme de construction du projet en x64. C'était le seul changement que j'avais fait. Après avoir apporté cette modification, le code a fonctionné pendant un court moment avant de commencer à afficher la même erreur que vous avez rencontrée. J'ai changé la cible de la plate-forme en x86 pour tester et soudain mon concepteur a recommencé à travailler. Par la suite, je l'ai changé en x64 et le problème a complètement disparu. Je soupçonne que le concepteur crée une sorte de code mis en cache dans x32 et que la modification de la plate-forme de construction x64 le casse lorsque vous modifiez le code.


J'ai eu cette répétition et je peux confirmer que cela résout le problème pour moi. Vous pouvez revenir à x64 après l'avoir créé dans x86.
teynon

Cela a fonctionné pour moi aussi dans VS 2012 ... après des heures à essayer de trouver quelque chose de logique. Merci Tom!
Bryan Greenway

Le passage à x86 et le retour à x64 ont résolu le problème ici, alors merci de m'avoir inspiré pour essayer cela. J'avais même fermé VS, supprimé bin et obj, et reconstruit, avec d'autres suggestions, et rien n'a aidé jusqu'à ce que cela.
Grault

Oui, cela a également fonctionné pour moi sur VS2015 Update 2. Cependant, il était nécessaire pour moi de recharger mes fichiers dll externes et de les reconstruire également.
SezMe

Avec VS2015U2, j'obtiens toujours ce problème dans x64. Fonctionne très bien dans n'importe quel processeur. Changer d'avant en arrière ne fonctionne pas pour moi.
DaleyKD

7

Je ne sais pas si cela aidera quelqu'un d'autre

Je suis nouveau sur WPF et toujours novice avec VB.net - donc je supposais que cette erreur était causée par le fait que je faisais un sommet stupide ........ supposons que je l'étais vraiment! J'ai réussi à m'en débarrasser en déplaçant mon projet d'un lecteur partagé vers l'un de mes lecteurs locaux. L'erreur a disparu, le projet ne compile parfaitement aucun autre problème - pour le moment. Il semble que VS2015 rencontre toujours des problèmes avec les projets détenus sur un Drive partagé.


2
Ce fut le cas pour moi, je l'ai déplacé vers ma vm (sur laquelle je développe) et boom aucun problème. Merci!
Mario Tacke

Cela a été le cas pour moi aussi il semble. Les déplacer vers un lecteur local (au lieu d'un partage réseau - comme configuré par Parallels pour unir un peu le système de fichiers Mac et Windows), a résolu le problème.
ckittel

7

Peut-être une autre solution lorsque le projet se compile mais que l'erreur XAML s'affiche:

  1. Dans l'exploration de solution, sur le nœud du projet qui contient le xaml
  2. Faites un clic droit sur le projet et choisissez 'Décharger le projet'
  3. Faites un clic droit sur le projet et choisissez 'Recharger le projet' Assurez-vous que votre projet est toujours choisi comme "projet de démarrage". Si non :
  4. Faites un clic droit sur le projet et choisissez 'Définir comme projet de démarrage'

Pas besoin de reconstruire ou de fermer Visual Studio.


6

Jésus ... C'est toujours un problème cinq ans plus tard dans Visual Studio 2017. Depuis que je suis nouveau dans WPF, j'étais sûr que le problème venait de moi, mais non, tout était compilé et fonctionnait correctement.

J'ai essayé de reconstruire, nettoyer et reconstruire, basculer entre la sortie x86 / x64, redémarrer Windows, nettoyer le dossier ShadowCache, ajouter "; assembly = {mon nom d'assembly principal}" à la déclaration d'espace de noms XML, rien n'a fonctionné! La seule chose qui a fait:

Mettez ma classe statique de commandes (dans mon cas, l'accord consistait à faire découvrir mes commandes WPF à la conception) dans son assembly séparé et à remplacer le nom de l'assembly par celui-ci.


2

J'ai eu le même problème, et dans mon cas, la vue de conception de balisage m'a demandé de reconstruire la solution et ne m'a pas montré la mise en page du formulaire avec ce message:, Design view is unavailable for x64 and ARM target platformsouBuild the Project to update Design view .

Il n'est pas résolu en reconstruisant la solution (ni la vue de conception ni l'erreur "Le nom n'existe pas dans l'espace de noms")

Je pense que c'était parce que j'avais joué avec les paramètres de Solution -> Propriétés> Propriétés de configuration

J'ai finalement résolu le problème avec 2 travaux:

  1. Cochez toutes les cases de la colonne Construire de la page: Solution -> Propriétés -> Propriétés de configuration
  2. Modification des configurations de solution de Debug à Release ou vice versa.

Je pense que c'est un bogue dans Visual Studio2012 Update 2.


2

Le même problème afflige Visual Studios 2013, Service Pack 4. Je l'ai également essayé avec Visual Studios 2015 Preview avec les mêmes résultats.

C'est juste une limitation du visualiseur WPF que l'équipe de Visual Studios n'a pas corrigée. Pour preuve, la construction en mode x86 active le visualiseur et la construction en mode x64 le désactive.

Curieusement, intellisense fonctionne pour Visual Studios 2013, Service Pack 4.


2

J'ai eu ce problème récemment en utilisant VS 2015 Update 3 pour mon projet WPF dans .NET 4.6.2. La copie de mon projet était dans un dossier réseau , je l'ai déplacée localement et cela a résolu le problème.

Cela peut résoudre d'autres types de problèmes, car il semble que VS 2015 n'aime pas les chemins réseau. Un autre problème qui est un gros problème pour eux est la synchronisation des référentiels git si mon projet est dans un chemin réseau, également résolu en le déplaçant localement.


1

On dirait que ce problème peut être résolu grâce à diverses «astuces».

Dans mon cas, j'avais construit / reconstruit / nettoyé la solution entière, au lieu du seul projet sur lequel je travaillais dans la solution. Une fois que j'ai cliqué sur "Construire [mon projet]", le message d'erreur a disparu.


1

Essayez de vérifier vos références d'assemblage. Si vous avez un point d'exclamation jaune sur les références du projet, il y a un problème et vous obtiendrez toutes sortes d'erreurs.

Si vous savez que la référence du projet est correcte, vérifiez le cadre cible. Par exemple, avoir un projet utilisant le framework 4.5 référence un projet avec le framework 4.5.2 n'est pas une bonne combinaison.


En d'autres termes, la version .NET Framework du projet ne peut pas être antérieure à la version .NET Framework du projet référencé.
icernos

1

La solution pour moi était de débloquer les DLL d'assemblage. Les messages d'erreur que vous obtenez ne l'indiquent pas, mais le concepteur XAML refuse de charger ce qu'il appelle des assemblys "sandbox". Vous pouvez le voir dans la fenêtre de sortie lorsque vous créez. Les DLL sont bloquées si elles sont téléchargées sur Internet. Pour débloquer vos DLL d'assemblage tierces:

  1. Cliquez avec le bouton droit sur le fichier DLL dans l'Explorateur Windows et sélectionnez Propriétés.
  2. Au bas de l'onglet Général, cliquez sur le bouton "Débloquer" ou sur la case à cocher.

Remarque: ne débloquez les DLL que si vous êtes sûr qu'elles sont sûres.


Cela a fonctionné pour moi - j'avais téléchargé un projet hors de Dropbox et j'obtenais l'erreur. J'ai également dû supprimer le ShadowCache
geometrikal

1

Dans mon cas, le contrôle utilisateur a été ajouté au projet principal. J'ai essayé différentes solutions ci-dessus en vain. Soit j'obtiendrais un balisage invalide mais la solution compilerait et fonctionnerait, soit j'ajouterais le xmlns: c = "clr-namespace: MyProject; assembly = MyProject" et ensuite le balisage montrerait, mais j'obtiendrais une erreur de compilation que le La balise n'existe pas dans l'espace de noms XML.

Enfin, j'ai ajouté un nouveau projet de bibliothèque de contrôle utilisateur WPF à la solution et déplacé mon contrôle utilisateur du projet principal vers celui-ci. Ajout de la référence et modification de l'assemblage pour pointer vers la nouvelle bibliothèque et enfin le balisage a fonctionné et le projet compilé sans erreur.


1

J'ai parcouru toutes les réponses et aucune ne m'a aidé. Finalement, j'ai pu le résoudre par moi-même, présentant ainsi la réponse car elle pourrait aider les autres.

Dans mon cas, la solution avait deux projets, l'un contenant les modèles (disons que le nom du projet et de l'assemblage était Modèles ) et un autre contenant les vues et les modèles de vue (selon notre convention: le projet, le nom de l'assemblage et l'espace de noms par défaut étaient des modèles. ) . Le projet Models.Monitor fait référence.

Dans le projet Models.Monitor, dans l'un des xaml, j'ai inclus l'espace de noms suivant: xmlns: monitor = "clr-namespace: Models.Monitor"

Je soupçonne que MsBuild et Visual Studio se sont alors trompés alors qu'ils essayaient de trouver un type «Moniteur» dans l'assemblage «Modèles» . Pour résoudre, j'ai essayé ce qui suit:

  1. xmlns: monitor = "clr-namespace: Models.Monitor; assembly =" - qui est valide si l'espace de noms est dans le même assembly que par https://msdn.microsoft.com/en-us/library/ms747086(v=vs .110) .aspx
  2. a également essayé la déclaration d'espace de noms explicite: xmlns: monitor = "clr-namespace: Models.Monitor; assembly = Models.Monitor"

Aucun des éléments ci-dessus n'a fonctionné.

Finalement, j'ai abandonné, et comme un travail autour a déplacé le UserControl que j'essayais d'utiliser vers un autre espace de noms: 'ModelsMonitor' . J'ai pu bien compiler après cela.


1

Dans mon cas, j'avais un espace de noms et une classe orthographiés exactement de la même manière, donc par exemple, l'un de mes espaces de noms était

firstDepth.secondDepth.Fubar

qui contient ses propres classes (par exemple firstDepth.secondDepth.Fubar.someclass)

mais j'avais aussi une classe ' Fubar ' dans l'espace de noms

firstDepth.secondDepth

qui résout textuellement le même que l'espace de noms Fubar ci-dessus.

Ne fais pas ça


1

Dans mon cas, le problème était dû à certains fichiers fantômes dans le répertoire obj du projet. Ce qui suit a résolu le problème pour moi:

  • Projet propre
  • Quitter VS
  • rm -rf / obj / *
  • Invoquer VS et reconstruire

1

J'ai aussi beaucoup de problèmes avec celui-ci! Intellisense m'aide à compléter l'espace de noms et tout, mais le compilateur pleure. J'ai essayé tout ce que j'ai trouvé dans ce fil et dans d'autres. Cependant, dans mon cas, ce qui a aidé à la fin a été d'écrire quelque chose comme ceci:

xmlns:util="clr-namespace:LiveSpielTool.Utils;assembly="

Laisser le nom d'assemblage vide. Je ne sais pas pourquoi. Mais cela a été mentionné ici. Je dois ajouter que je développe un assembly, donc l'attribut assembly pourrait avoir un sens. Mais entrer le nom de l'assemblage ne fonctionnait pas. Si étrange.


0

VB.NET n'ajoute pas automatiquement les informations d'espace de noms en fonction de la structure de dossiers comme il le fait dans C #. Je pense que je suis en train de suivre le même tutoriel que vous (Teach Yourself WPF en 24 heures), et de faire la même conversion en VB.

J'ai trouvé que vous devez ajouter manuellement les informations d'espace de noms à la fois à la classe XAML et au code XAML.VB pour pouvoir utiliser les espaces de noms comme décrit dans le livre. Même dans ce cas, VB n'attribue pas automatiquement l'espace de noms à l'assembly comme il le fait dans VB.

Il existe un autre article ici qui montre comment l'inclure dans vos modèles de projet afin de créer automatiquement les informations d'espace de noms - Ajouter automatiquement un espace de noms lors de l'ajout d'un nouvel élément


0

Dans la page de propriétés de la solution, vérifiez la plate-forme de l'assembly qui contient «UpdatingMediaElement» et les assemblages qui contiennent l'une des superclasses et interfaces à partir desquelles «UpdatingMediaElement» sous-classe ou implémente. Il apparaît que la plate-forme de tous ces assemblages doit être "AnyCPU".


0

Autre cause possible: un événement post-build supprime la DLL du projet du dossier de génération.

Pour clarifier: le concepteur WPF peut signaler «Le nom XXX n'existe pas dans l'espace de noms ...», même lorsque le nom existe dans l'espace de noms et que le projet se construit et s'exécute très bien si un événement de post-génération supprime la DLL du projet de le dossier de construction (bin \ Debug, bin \ Release, etc.). J'ai une expérience personnelle avec cela dans Visual Studio 2015.


0

Ok, donc aucun de ces conseils n'a fonctionné pour moi, malheureusement. J'ai finalement réussi à résoudre le problème. Il semble que Visual Studio ne fonctionne pas correctement avec les lecteurs réseau. J'ai résolu ce problème en déplaçant le projet du lecteur partagé vers mon local et recompilé. Plus d'erreurs.


Cette réponse est fournie au moins deux fois ci-dessus.
pdschuller

0

Ajout à la pile.

Le mien était le nom d'assembly de l'application WPF était le même nom d'assembly qu'une DLL référencée. Assurez-vous donc que vous n'avez pas de noms d'assembly en double dans l'un de vos projets.


0

J'avais la solution stockée sur un partage réseau et chaque fois que je l'ouvrais, j'obtenais un avertissement concernant des sources non fiables. Je l'ai déplacé vers un lecteur local et l'erreur «l'espace de noms n'existe pas» a également disparu.


0

Essayez également de faire un clic droit sur votre projet-> propriétés et de changer la cible de la plate-forme sur N'importe quel processeur et de reconstruire, cela fonctionnera ensuite. Cela a fonctionné pour moi


1
Votre suggestion est un changement important qui peut même ne pas être une possibilité pour le PO s'il vise un environnement particulier. Quoi qu'il en soit, il est très peu probable que ce soit la cause du problème, et si cela résolvait le problème pour vous, je suggérerais que votre problème réel était des configurations de projet incompatibles, qui se seraient manifestées de différentes manières au problème montré ici.
LordWilmore

0

Ce problème peut également être causé si l'assembly que vous référencez n'est pas réellement généré. Par exemple, si votre xaml est dans Assembly1 et que vous référencez une classe également dans Assembly1, mais que cet assembly a des erreurs et ne se construit pas, cette erreur sera affichée.

Je me sens ridicule, mais dans mon cas, je déchirais un contrôle utilisateur et j'ai eu toutes sortes d'erreurs dans les classes associées. Alors que j'essayais de tous les corriger, j'ai commencé par les erreurs en question, sans me rendre compte que xaml s'appuie sur des assemblys construits pour trouver ces références (contrairement au code c # / vb qui peut le résoudre avant même de construire).


0

J'ai fait ajouter l'assemblage en tant que projet - d'abord supprimé le ddl qui a été ajouté spécifiquement aux références à la dll - qui l'a fait.


0

J'ai ce problème tout le temps. Mes vues sont dans un projet de bibliothèque de contrôles personnalisés WPF (une variante de la bibliothèque de classes). Je peux référencer des assemblys prédéfinis, mais je ne peux référencer aucun code dans un autre projet de la même solution. Dès que je déplace le code vers le même projet que le xaml, il est reconnu.


0

Dans mon cas, ce problème se produira lorsque l'architecture du programme wpf n'est pas exactement la même avec la dépendance. Supposons que vous ayez une dépendance x64 et une autre AnyCPU. Ensuite, si vous choisissez x64, le type dans la dll AnyCPU "n'existe pas", sinon le type dans la dll x64 "n'existe pas". Vous ne pouvez pas les émiler tous les deux.

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.