WPF: le nom n'existe pas dans l'espace de noms

je construis une application C# / WPF en utilisant VS2013, et j'ai la définition de classe suivante (dans le même assemblage de l'application en cours d'exécution):

namespace MyNamespace
{
    public class MyKey
    {
        public MyKey() { }
        public string name = "";
    }
}

Dans MainWindow.xaml j'ai:

<Window x:Class="MyNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyNamespace"
        Title="MainWindow" Height="350" Width="525" WindowState="Maximized" WindowStyle="None">
    <Window.Resources>
        <local:MyKey x:Key="key" />
    </Window.Resources>
...

VS continue de rapporter que

le nom "MyKey" n'existe pas dans namespace "clr-namespace:MyNamespace"

des idées?

<!-J'ai essayé les solutions suivantes (À partir de questions déjà stackoverflow) mais aucun n'a fonctionné:

  1. déplacer la classe vers un espace de noms différent, puis utiliser le nouvel espace de noms dans la référence xaml
  2. redémarrage VS et nettoyage / reconstruction de la solution
  3. nettoyer la solution puis renommer son dossier puis reconstruire la solution à nouveau
  4. modifier la référence à:

xmlns: local= " clr-namespace:MyNamespace;assembly="

Modifier: Informations supplémentaires: l'architecture cible: X64, cadre cible: .Net 4.5

22
demandé sur Ibraheem 2015-01-29 16:35:24

5 réponses

une solution commune à ce bug VS connu que vous n'avez pas spécifié comme ayant essayé est de changer la plate-forme cible de construction.

  1. si votre plate-forme cible actuelle est x64, passez à x86. Si c'est actuellement x86, passez à x64.

  2. nettoyer et construire la solution pour la nouvelle plate-forme cible.

  3. revenir à la plate-forme cible désirée et se reconstruire.

46
répondu Gordon True 2015-01-29 14:07:32

j'ai eu le même problème dans VS2012 express edition. Résolu le problème en utilisant la commande

"WDExpress/Resettings" dans l'invite de commande vs2012.

https://stackoverflow.com/a/33706647/4855197

2
répondu Adeeb Arangodan 2017-05-23 11:55:10

une solution possible est de supprimer tous les .dll les fichiers de Debug et Libération dossier.

parce que parfois quand vous vous référez au projet il se réfère aux dlls pré-construits, même si vous exécutez votre projet en mode de débogage.

Supprimer tous les fichiers de debug et libération classez et construisez ce projet de nouveau, Maintenant ajoutez la référence de ce projet à où vous voulez. Parfaitement bien travaillé sur mon fin.

1
répondu Khawaja Asim 2016-12-01 10:57:56

j'ai eu un problème similaire. Ce qui l'a corrigé pour moi était de changer les propriétés de construction du projet, qui a été ajouté comme référence. Il s'est avéré que la "cible plate-forme" avait été changée dans le passé. Le paramétrer à "N'importe quel CPU" et le reconstruire résout l'erreur.

0
répondu karstenp 2018-03-08 01:01:41

Running VS Enterprise 2017 version 15.6.2 Ciblage .Net 4.6.1

j'ai eu ce même problème avec une page XAML UserControl où dans ses ressources il essayait de faire référence à un ValueConverter. L'espace de noms était correct, l'intellisense le laisserait même tomber pour vous, mais le concepteur ne chargerait pas la page et le code ne compilerait pas. J'ai même essayé de déplacer un des convertisseurs de valeur hors du fichier et de l'espace de noms en question et de le déplacer vers le code-derrière. VS a été prise en tellement flippé qu'il réclamait la méthode InitializeComponent() dans le code-behind constructeur était inexistante.

ce que je pense avoir finalement corrigé pour moi était quand j'ai réalisé que la classe ValueConverter manquait l'attribut principal comme ceci:

[ValueConversion(typeof (string), typeof (decimal))]

une fois que j'ai ajouté cette ligne, j'ai fait une solution rapide nettoyer et compiler puis il a compilé et a fonctionné. Puis soudain le xaml a pu voir toutes les règles de validation et les convertisseurs de valeur dans ce fichier. Et maintenant j'ai réalisé que les 3 autres convertisseurs de valeurs dans ce fichier n'avaient pas non plus D'attribut ValueConversion sur eux et pourtant le code est encore compilé maintenant. Peut-être que les types entrants dans le premier convertisseur étaient vagues.

C'est encore un mystère. Je sais que je devrais annuler mon changement et voir si l'erreur est reproductible, mais après avoir combattu ce code pendant la majeure partie de la journée, je suis malade de le regarder. Il c'était un vieux projet Prism qui ne fonctionnait pas et je l'ai mis à jour en bibliothèques Prism 7.0. J'ai aussi essayé de réinitialiser tous les paramètres du processeur à 'N'importe quel CPU'. Il se plaignait du fait que le bootstrapper était obsolète, mais je l'avais ignoré. J'avais tout redémarré et nettoyé plusieurs fois. J'avais même supprimé le .vs dossier. J'aurais probablement dû essayer plus tôt de supprimer complètement les dossiers obj et bin - c'est la seule chose que je n'avais pas fait.

Ce n'était pas mon projet. Normalement, je construis toujours de la valeur les convertisseurs un à un fichier avec le même nom. Je ne pensais pas que ça aurait de l'importance, mais l'erreur était un peu folle en premier lieu.

0
répondu Kevin Sherrill 2018-04-11 19:20:40