web-dev-qa-db-fra.com

la balise n'existe pas dans l'espace de noms XML

Cette erreur semble être signalée partout mais chacune semble avoir sa propre solution, aucune d’elles n’ayant résolu mon problème.

Je reçois une erreur pour un dictionnaire de ressources que je fais (et fusionne plus tard) que la balise 'ModelBindings' n'existe pas dans l'espace de noms XML 'clr-namespace: Company.Project.Module.Folder; Assembly = Company.Project.Module'

L’Assemblée que je référence est personnalisée et contenue dans la solution. De plus, nous avons examiné la DLL insérée dans la corbeille du projet dans lequel se trouve le dictionnaire de ressources. Après inspection, celle-ci contient la classe à laquelle je souhaite faire référence. Donc, je sais que 1. la dll est au bon endroit pour être consulté et est dans les références. 2. La dll contient les données que je veux.

Voici quelques bouts de code pour le dictionnaire de ressources

La liste de l'espace de noms

xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;Assembly=Company.Project.Module"

Création de la ressource à référencer

<modulemodel:ModelBindings x:Key="ModuleModelBindings"/>

Comme les erreurs des autres, l'intellisense dit qu'il est casher. La liste xmlns a également été créée avec la saisie semi-automatique d’intelliSense et retapée manuellement. Ni travaillé.

J'ai également essayé de tout déplacer vers app.xaml et cela m'a toujours donné la même erreur. 

Si je supprime le corps du fichier ResourceDictionary, le code est bien compilé, mais toutes les liaisons sont rompues.

Enfin, toutes les définitions de ressources étaient définies dans les fichiers xaml où elles étaient utilisées, cela fonctionnait bien. Ce n'est qu'après avoir essayé de les créer à partir d'un projet différent que cela n'a pas fonctionné. J'ai changé cela pour corriger une erreur et revenir à l'ancienne méthode pouvait potentiellement être problématique.

Edit: Voici le mieux que je puisse faire pour afficher le dictionnaire de ressources que j'utilise

<SharedResourceDictionary
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;Assembly=Company.Project.Module"
                    >
    <modulemodel:ModelBindings x:Key="ModuleModelBindings"/>

</SharedResourceDictionary>

si je remplace SharedResourceDictionary par ResourceDictionary, la même erreur se produit.

app.xaml et le SharedResourceDictionary ci-dessus sont comparés dans l'espace de noms Company.Project.Main et il contient des références à la fois où SharedResourceDictionary est défini ainsi qu'aux différents projets de module que j'ai mis dans le code ci-dessus.

Solution

On dirait que c'était surtout une erreur d'utilisateur. Mais cela pourrait arriver à d'autres. Lorsque j'ai copié la définition xmlns: moduleviewmodel à partir de son fichier d'origine, j'ai dû ajouter la portion Assembly = par moi-même. Comme je l'ai dit, je l'ai fait tous les deux moi-même et j'utilise l'auto-complétion suivante en tapant 'xmlns: moduleviewmodel ='. Juste avant de trouver l'erreur, nous avons réessayé l'auto-complétion car nous avons constaté qu'il y avait l'un des 7 espaces de noms qui ne générait pas l'erreur. C'est à ce moment-là que j'ai remarqué qu'il y avait une lettre dans la trajectoire de l'Assemblée qui ne devait pas être majuscule. La chose étrange est l'auto-complétion insère réellement cette erreur elle-même. Pendant que nous compilions, j'ai remarqué la lettre erronée. Le plus étrange, c'est qu'après avoir corrigé manuellement tous les chemins, nous avons réessayé l'auto-complétion et cela s'est épelé correctement.

Je n'ai aucune idée de la cause de la saisie semi-automatique erronée, mais la lettre fixe compile parfaitement.

Maintenant, je me demande simplement si quelqu'un va croire que la saisie semi-automatique a changé!

15
StephenT

On dirait que c'était surtout une erreur d'utilisateur. Mais cela pourrait arriver à d'autres. Lorsque j'ai copié la définition xmlns:moduleviewmodel à partir de son fichier d'origine, je devais ajouter moi-même la portion Assembly =. Comme je l'ai dit, je l'ai fait tous les deux moi-même et j'utilise l'auto-complétion comme suit: "xmlns: moduleviewmodel =". Juste avant de trouver l'erreur, nous avons réessayé l'auto-complétion car nous avons constaté qu'il y avait l'un des 7 espaces de noms qui ne générait pas l'erreur. C'est à ce moment-là que j'ai remarqué qu'il y avait une lettre dans la trajectoire de l'Assemblée qui ne devait pas être majuscule. La chose étrange est l'auto-complétion insère réellement cette erreur elle-même. Pendant que nous compilions, j'ai remarqué la lettre erronée. Le plus étrange, c'est qu'après avoir corrigé manuellement tous les chemins, nous avons réessayé l'auto-complétion et cela s'est épelé correctement.

Je n'ai aucune idée de la cause de la saisie semi-automatique erronée, mais la lettre fixe compile parfaitement.

Maintenant, je me demande simplement si quelqu'un va croire que la saisie semi-automatique a changé!

14
StephenT

Selon cet article , vous procédez comme suit:

DE:

xmlns: ZZZ = "espace de noms clr: YYY; Assembly = YYY"

À:

xmlns: ZZZ = "espace de noms clr: YYY; Assembly ="

laisser une valeur vide pour Assembly =

C'est la solution qui fonctionne pour moi.

27
jgong

Ce n'est peut-être pas la solution à votre problème, mais je vois assez souvent l'erreur que vous demandez, et le problème est généralement causé par un problème de chargement de l'Assemblée. 

Si vous vérifiez votre assemblage et qu'il comporte un triangle jaune, il est probablement incompatible avec la configuration actuelle de votre projet, à cause de différentes versions de .NET, ou quelque chose du genre.

Cela échouera généralement en silence ou ne provoquera qu'un avertissement. lorsque vous essayez de référencer l’assemblage dans votre XAML, vous obtenez une erreur comme celle que vous avez décrite.

9
CodyF

Vérifiez les avertissements dans la liste des erreurs, dans mon cas, il y avait des messages concernant des références .Net 4.5.1 non résolues, alors que mon cadre cible de projet était de 4,5

3
Gunman7840

J'ai eu une raison totalement différente pour cette erreur:

J'essayais d'utiliser une classe de l'Assemblée A, alors je 

1) a ajouté une référence à cette assemblée à mon projet, 

2) ajout de la référence à l'Assemblée B, utilisée par l'Assemblée A, dans mon projet,

3) ajouté à mon XAML

 xmlns:assemblyA="clr-namespace:A;Assembly=A"

3) ajouté à mon code

using A;

Cela n'a pas fonctionné, j'ai l'erreur "La balise n'existe pas". 

Qu'est-ce qui a aidé, ajoutait

using B;

dans mon code, bien que je n'utilise directement rien de Assembly B.

1
Flot2011

Si vous avez le contrôle de l'utilisateur dans le même assemblage que le formulaire WPF, assurez-vous de vous débarrasser de la pièce d'assemblage lors de l'importation d'un espace de nom.

Importation incorrecte: xmlns: usercontrol = "espace de nom clr: CCFARKS.UserControls; Assembly = CCFARKS"

Corret: xmlns: usercontrol = "espace de nom clr: CCFARKS.UserControls"

0
Rahul Lore