web-dev-qa-db-fra.com

Le nom "XYZ" n'existe pas dans l'espace-noms "clr-namespace: ABC"

Je travaillais sur la création d'extensions de balisage et j'ai commencé à avoir des comportements VS très étranges. J'ai extrait et identifié le problème dans la solution séparée. Le problème est que VS ne peut pas créer un objet CLR en XAML. 

C'est ici:

Vue:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication4="clr-namespace:WpfApplication4">
    <Window.Resources>
        <wpfApplication4:Dog x:Key="doggy" />
    </Window.Resources>
    <Grid />
</Window>

Code derrière:

using System.Windows;

namespace WpfApplication4
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Classe de chien:

namespace WpfApplication4
{
    public class Dog
    {

    }
}

App.Xaml (pas de code dans App.Xaml.cs):

<Application x:Class="WpfApplication4.App"
             xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

Project settings

Exception je reçois:

Error   1   The name "Dog" does not exist in the namespace "clr-namespace:WpfApplication4". \\hopr1\folders$\vxk\Documents\Visual Studio 2012\Projects\WpfApplication4\MainWindow.xaml  6   9   WpfApplication4

Je suis en mesure d'exécuter la solution, mais le concepteur échoue avec l'erreur "Invalid Markup" Des idées?

Modifier

J'utilise VS 2012 Update 2 La même solution fonctionne dans VS 2012 Update 1.

65
Vitalij

Votre solution fonctionne sur un partage réseau. Les applications .Net (et Visual Studio) peuvent rencontrer des problèmes d'autorisation/d'accès lors de l'exécution sur un partage réseau.

Copiez votre solution sur un lecteur local (en toute confiance) et tout devrait bien se passer.

Il est possible de faire fonctionner un lecteur réseau en toute confiance (vous pouvez trouver des réponses à cela sur StackOverflow et d’autres endroits), mais, d’après mon expérience, je rencontre toujours des obstacles lorsque je le fais. problème à portée de main.

Par exemple. cette question donne des instructions sur la façon de procéder:

Donnez FullTrust au partage UNC pour Visual Studio 2012 et .Net 4.0

Je n’ai jamais essayé cela avec VS2010, alors (comme indiqué dans le lien), vous aurez peut-être plus de joie avec 2012.

47
GrahamMc

Si vous rencontrez ce problème maintenant, AVANT DE FAIRE TOUT autre chose ... si vous êtes certain que vos classes/espaces de noms sont corrects et que la reconstruction n'a pas résolu votre problème:

Essayez de redémarrer Visual Studio

C'est tout!

Cela semble être un bogue avec Visual Studio 2012 (semble également affecter toutes les autres versions prenant en charge le développement XAML)


Mise à jour: si le redémarrage de Visual Studio ne fonctionne pas, redémarrez le PC entier.

Mise à jour: comme mentionné dans les commentaires de @Dunk, si le redémarrage de Visual Studio ne fonctionne pas, essayez de supprimer le fichier .suo.

109
Jordan

J'ai rencontré le même problème, mais mes fichiers sont stockés localement. Mon IValueConverter réside dans une assemblée différente de la vue l'utilisant. Bien que VS2013 IntelliSense ait suggéré ce qui suit, cela ne fonctionnait pas:

xmlns:conv="clr-namespace:MySharedAssembly.Converters"

Après avoir explicitement ajouté l’Assemblée à la fin, cela a fonctionné:

xmlns:conv="clr-namespace:MySharedAssembly.Converters;Assembly=MySharedAssembly"
30
Wouter

Je suis resté sur cette erreur pendant des heures. Les assemblys et les namespaces étaient corrects, les classes et les références également. Compiler et exécuter correctement, seul le concepteur a eu des problèmes avec moi. La seule chose qui a fonctionné

  1. à des fins de conception de x64 à x86
  2. pour exécuter et déboguer revenir à x64

J'utilise 3d party portable.library que je n'avais qu'en version x64.

11
Stefan Michev

Solution DLL téléchargée

  1. Débloquer le fichier .dll
    • Faites un clic droit dessus et sélectionnez les propriétés
    • Débloquez-le dans l'onglet "Général" (voir image)
  2. Assurez-vous que VS valide le XAML (peut-être en le redémarrant)

 enter image description here

10
consideRatio

Cela se produit encore dans VS 2015. J'ai sorti le SomeConverter dans App.xaml:

<Application.Resources>
    <!--Value Converters-->
    <local:SomeConverter x:Key="mySomeConverter"/>

Strg-Shift-B
Remettez-le dedans - et cela a fonctionné.

6
Andi Truman

Créez un lien symbolique vers le partage réseau sur votre lecteur local.

Allez à la ligne de commande et tapez mklink/D C:\LOCALFOLDER\YOURNETWORKPATH

Ensuite, ouvrez les projets de votre dossier local et tous les problèmes disparaîtront . Maintenant, tous les fichiers seront toujours sur votre partage réseau. :)

3
Tom

Avant d'essayer une solution complète, essayez les solutions suivantes:

J'ai eu exactement le même problème, j'ai fermé la fenêtre/le formulaire à l'origine de l'erreur, puis j'ai exécuté le projet,

L'erreur semblait disparaître une fois que le projet avait abouti et qu'il ne revenait pas.

J'espère que cela aidera tous ceux qui recherchent une solution rapide.

2
Connor Mcgrann

J'ai eu la même erreur dans Visual Studio 2015 et j'ai réussi à faire travailler le concepteur en décochant le bouton "Désactiver le code du projet".

 Screenshot to Designer Button

2
ChristianMurschall

Je commençais un nouveau projet et j'avais ce problème. Aucune des solutions répertoriées ici ne fonctionnait pour moi, notamment la suppression du fichier suo, le déchargement/rechargement du projet, le redémarrage de VS, etc.

Ce qui a fonctionné pour moi, c’était parce que c’était un nouveau projet que je ne l’avais pas encore construit. J'ai supprimé l'élément Window.DataContext du presse-papiers, construit le projet une fois (shift-ctrl-b), puis rajouté l'élément et il a fonctionné immédiatement.

2
Jim Yarbro

Après avoir redémarré Visual Studio, une erreur IntelliSense m'a renvoyé dans la bonne direction.

Parce que 'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionTypeNode' est implémenté dans le même assemblage, vous devez définir l'attribut x: Name plûtot que le Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionPropertyNode attribut.

Alors j'ai changé ça:

<local:MyView Name="test"/>

Pour ça:

<local:MyView x:Name="test"/>

Et puis ça a marché. Alors, ça nous donne quoi? 42 causes possibles? Irréel...

0
l33t

J'ai aussi un projet sur un partage réseau et cette erreur est apparue de manière inattendue. J'ai essayé toutes les suggestions ci-dessus, y compris la copie du projet sur un disque local, le nettoyage, la reconstruction et l'ouverture et la fermeture de VS. Aucune de ces solutions n'a résolu le problème. 

Ce qui a fonctionné pour moi a été simplement de supprimer la référence d’espace de noms au dossier viewmodels (xlmns: vm = "espace de noms clr: Myproj.ViewModel").

J'ai ajouté le type à mon xaml (DataTemplate DataType = "{x: Type vm: myviewmodel}"). Visual studio a alors détecté que l'espace de nom était manquant et j'ai cliqué sur l'invite pour ajouter l'espace de nom. 

0
Haim Katz

Pour quelqu'un d'autre coincé. 

Ce qui a fonctionné pour moi a été de changer l’alias d’espace de nommage de local à autre.

xmlns:local="clr-namespace:ExampleNameSpace.Folder" />

<Grid>
    <StackPanel>
        <local:ReferencedUserControl />
    </StackPanel>
</Grid>

à 

xmlns:blah="clr-namespace:ExampleNameSpace.Folder" />

<Grid>
    <StackPanel>
        <blah:ReferencedUserControl />
    </StackPanel>
</Grid>

J'espère que cela t'aides!

0
Ben Winding

Ce qui a fonctionné pour moi est de changer leMOVEenXCOPYdansPost Builddans leproject propertiespuisre-buildle projet. Le concepteur peut vouloir la DLL dans le dossier de sortie du projet. J'utilise vs 2015

0
Sony

J'ai eu 3 erreurs dans le projet et était concentré sur cette erreur concernant ObjectDataProvider. J'ai découvert que cette erreur ne peut pas être résolue si le projet ne peut pas être généré à cause d'autres erreurs. J'ai eu quelques autres gestionnaires d'événements dont le code avait été supprimé. Je devais également supprimer le code qui essayait de lier les gestionnaires aux contrôles. Ensuite, le projet a pu générer et voir que la classe que je tentais de référencer à partir de ObjectDataProvider était disponible.

0
BlueMonkMN

Cela me gêne depuis les années 2008, 10, 12, 13.

Chaque fois que cela se produit (et oui, je travaille sur un partage réseau - je ne peux pas l'éviter), je ferme VS, renomme le dossier et rouvre le projet. 9 fois sur 10, cela fonctionne. Pour un moment.

0
Muckers Mate

Le déclarer dans un dictionnaire de ressources a fonctionné pour moi.

<Window.Resources>
    <c:IsNullConverter x:Key="IsNullConverter" />
</Window.Resources>

Le problème semble être que l'analyseur se bloque lui-même lorsqu'il voit une extension de balisage telle que Converter={c:IsNullConverter}}", mais convient à: Converter={StaticResource IsNullConverter}. Je pense que c'est peut-être là que réside le problème. 

Windows 10, VS 2013

0
Cool Blue

Le nom “XYZ” n’existe pas dans l’espace de nommage “clr-namespace: ABC”

Résolu !!

vérifie si la fonction que vous voulez appeler/la classe est présente dans l'espace de noms 

Exemple correct:

Fichier .XAML

          <Window x:Class="objectbinding.MainWindow"
           <!--your xmlns:x .......
           namespace1 is the project name-->
           xmlns:m="clr-namespace:namespace1"
            Title="MainWindow" Height="350" Width="525">
    <Grid>
 <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                    x:Key="anyname" MethodName="GetStrings"/>

            </StackPanel.Resources>

       ItemsSource="{Binding Source={StaticResource Runni}}" />
        </StackPanel>
    </Grid>

// StringData est le nom de la classe dans xaml.cs et GetString est la fonction.

Fichier .XAML.CS

 namespace namespace1
    {

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

        }
// the class StringData is defined in namespace namespace 1
        public class StringData
        {
            ObservableCollection<String> lst = new ObservableCollection<String>();

            public StringData()
            {
                lst.Add("Abhishek");
                lst.Add("Abhijit");
                lst.Add("Kunal");
                lst.Add("Sheo");
            }
            public ObservableCollection<String> GetStrings()
            {
                return lst;
            }
        }
    }

Mauvais exemple:

Fichier .XAML

  <Window x:Class="objectbinding.MainWindow"
              <!--your xmlns:x .......
           namespace1 is the project name-->
           xmlns:m="clr-namespace:namespace1"
            Title="MainWindow" Height="350" Width="525">
    <Grid>
 <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                    x:Key="anyname" MethodName="GetStrings"/>

            </StackPanel.Resources>

       ItemsSource="{Binding Source={StaticResource Runni}}" />
        </StackPanel>
    </Grid>

.XAML.CS 

namespace namespace1
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
//The StringData is defined in the class mainWindow not in namespace namespace1
        public class StringData
        {
            ObservableCollection<String> lst = new ObservableCollection<String>();

            public StringData()
            {
                lst.Add("Abhishek");
                lst.Add("Abhijit");
                lst.Add("Kunal");
                lst.Add("Sheo");
            }
            public ObservableCollection<String> GetStrings()
            {
                return lst;
            }
        }
    }

}
0
Runni Kumari

Dans mon cas, cette erreur a été provoquée par le fait d'avoir des assemblages signés avec l'option 'signer uniquement le retard' activée La solution consistait à exécuter la commande sn -Vr * à partir de la console du développeur (en tant qu'administrateur). Ceci enregistre l’assemblée pour la vérification en sautant. Et puis redémarrez Visual Studio.

0
Scroog1