Pourquoi ne puis-je pas référencer System.ComponentModel.DataAnnotations?

97

J'essaie d'utiliser DataAnnotations dans mon projet WPF pour spécifier une longueur maximale de chaînes, avec ce qui suit:

using System.ComponentModel.DataAnnotations;

Cependant, j'obtiens l'erreur

Le type ou le nom d'espace de noms 'DataAnnotations' n'existe pas dans l'espace de noms 'System.ComponentModel' (vous manquez une référence d'assembly?)

Je l' ai vu d' autres exemples n'existent dans cet espace de noms. J'utilise C # 4. Y a-t-il une raison pour laquelle je ne peux pas l'utiliser? Que puis-je faire pour le réparer?DataAnnotations

DaveDev
la source
Avez-vous installé MVC? Je crois que DataAnnotations appartient à ce package
dougajmcdonald
3
Il vous manque peut-être une référence d'assemblage.
phoog
1
Les messages d'erreur sont conçus pour être utiles et non pour être ignorés.
Kendall Frey
6
Ok les gars, pardonnez-moi de paraître ignorant, mais je fais référence à l'assemblage System.ComponentModelet j'utilise divers autres composants. Selon @Hari ci-dessous, il semble qu'il DataAnnotationsexiste dans son propre assemblage. Je pensais qu'il existerait à l'intérieur System.ComponentModelcar il est dans le même espace de noms.
DaveDev

Réponses:

156

Vous devez référencer l'assembly dans lequel cet espace de noms est défini (il n'est pas référencé par défaut dans les modèles de Visual Studio). Ouvrez votre gestionnaire de références et ajoutez une référence à l'assembly System.ComponentModel.DataAnnotations (Explorateur de solutions -> Ajouter une référence -> Sélectionnez l'onglet .Net -> sélectionnez System.ComponentModel.DataAnnotations dans la liste)

Hari
la source
10
Ce qui est étrange ici, c'est que VS n'a pas été en mesure de me donner le 'Potential Fix' normal pour celui-ci. Je me demande pourquoi ...
Todd Vance
Dans VS2019, l'onglet .net n'est (plus) là. Vérifiez la réponse la plus récente de JohnB qui fonctionne pour moi!
peter.cyc
19

Si vous utilisez .NET Core ou .NET Standard

utilisation:

Gérer les packages NuGet.

Utiliser la gestion des packages NuGet

au lieu de:

Ajouter une référence ...

N'utilisez pas Ajouter une référence

JohnB
la source
5
Depuis la ligne de commandedotnet add package System.ComponentModel.Annotations
Eric le
également via l'installation du gestionnaire de packages nuget dans VSCode, - -> suivi de la commande "commande + shift + p" (sur mac) - -> et en tapant "Nuget Package manager" et en sélectionnant "add package" dans la liste autocomplétée - - > et en tapant System .. et en attendant la saisie semi-automatique pour afficher le package correct et en sélectionnant "System.ComponentModel.Annotations" - -> et en sélectionnant le projet dans lequel cet assemblage doit être inclus - -> et en sélectionnant "restaurer" si nécessaire pour établir la référence.
supi le
13

Pour référencer System.ComponentModel.DataAnnotations

Dans un fichier de code pour avoir Using System.ComponentModel.DataAnnotations; en haut du fichier comme:

using System.ComponentModel.DataAnnotations;

Ajoutez une référence .NET à votre projet en cliquant avec le bouton droit sur le projet dans l'explorateur de solutions:

entrez la description de l'image ici

J'espère que cela t'aides! Cette question m'a aidé.

Catto
la source
8

Si vous ne l'avez pas dans les références (comme je ne l'ai pas fait), vous pouvez également ajouter le NuGet System.ComponentModel.Annotations pour obtenir les assemblys et résoudre les erreurs. (L'ajout ici car cette réponse est toujours en haut de Google pour l'erreur)

Rodger
la source
4

J'ai également eu le même problème et j'ai résolu en ajoutant la référence dans l'un de mes projets qui n'avait pas la référence mentionnée. Si vous avez 2-3 projets dans votre solution, vérifiez en ajoutant cette référence aux autres projets.

Ashish Sahu
la source
2

Utilisez la version 4.5 et supérieure de FrameWork pour votre projet, puis le problème est résolu, car cet espace de noms est inférieur à 4.5 et supérieur.

user2090762
la source
1
c'est incorrect. voir ici
itsho
J'utilise .NET 4.5.x et il n'est pas inclus. Mais alors je n'utilise pas MVC. Cette application est une application console sans interface utilisateur qui sera exécutée en tant que tâche cron une fois par jour. Je souhaite uniquement utiliser DataAnnotations dans les classes qui représentent les membres de données qui contiendront les données des colonnes que je récupère à partir de chaque ligne de table SQL Server. Je vais essayer de l'ajouter manuellement comme référence.
MiddleAgedMutantNinjaProgrammer
Jetez un œil dessus; ici
user2090762
@ user2090762: l'espace de noms existe, mais toutes les classes n'existent pas encore. En particulier, EmailAddressAttribute n'est disponible qu'en 4.5.
jmoreno
2

J'ai trouvé que je ne peux pas référencer System.ComponentModel.DataAnnotations de Silverlight 5 avec la version ci-dessous à (1). J'ai trouvé que les assemblages Silverlight 5 ne peuvent pas utiliser les assemblages .NET, cela donne l'erreur "Vous ne pouvez pas ajouter une référence à System.ComponentModel.DataAnnotations car il n'a pas été construit avec le runtime Silverlight. ..." Je prévois de contourner ce problème en j'espère installer le package Silverlight 5 trouvé à (2) ci-dessous. Si cela échoue, je mettrai à jour ce message.

[MISE À JOUR: il a échoué. J'ai installé tout ce qui concerne Silverlight 5 et je n'ai pas la version Silverlight de l'assembly .dll System.ComponentModel.DataAnnotations. Dommage. MISE À JOUR II: J'ai trouvé un ancien .dll portant ce nom d'une installation précédente du kit de développement Silverlight pour Visual Studio 2008 ou 2010. J'ai ajouté ce fichier et il semble `` fonctionner '', dans la mesure où IntelliSense reconnaît maintenant les attributs des membres de la classe, tel que [Display(Name = "My Property Name")]. si cela fonctionne ou non pour tout le reste de ce fichier .dll, je ne sais pas.]

(1)

Microsoft Visual Studio Professional 2013
Version 12.0.21005.1 REL
Microsoft .NET Framework
Version 4.5.51641

Version installée: Professionnel

(2) http://go.microsoft.com/fwlink/?LinkId=229318

PaulDécembre
la source
Mise à jour III - Je n'ai pas pu faire fonctionner System.ComponentModel.DataAnnotations.dll côté client, pour Silverlight 5, mais étrangement côté serveur, le projet Silverlight utilise la version .NET v4.5.1 de ce .dll très bien. Mais le côté client n'acceptera pas la version .NET et exige une version Silverlight de ce .dll, que je ne trouve nulle part à ce jour. Vous devez donc vous en passer côté client.
PaulDécembre
1

J'ai cherché de l'aide sur ce sujet car je suis tombé sur le même problème.

Bien que ce qui suit ne soit pas la réponse à la question posée à l'origine en 2012, cela peut être une solution pour ceux qui rencontrent ce fil.

Une façon de résoudre ce problème est de vérifier où se situe votre projet dans la solution. Il s'est avéré que pour mon instance (j'essayais d'installer un package NuGet mais ce ne serait pas le cas et l'erreur répertoriée s'est produite) que mon fichier de projet n'était pas inclus dans le répertoire de la solution bien qu'il soit affiché dans l'explorateur de solutions. J'ai supprimé le projet du répertoire hors de portée et j'ai rajouté le projet, mais cette fois dans le bon emplacement.

Guybrush Threepwood
la source
0
This error occurs when the reference to the "System.dll" got removed.Solution to the problem is very simple add the reference to "System.dll".The dll is normally available in the following location
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" .Add the reference your problem will get solved .
Ankit Agrawal
la source
0

Si vous avez essayé de mettre à jour Visual Studio de vs2008 à vs2010. Et votre application utilise le framework 3.5 (et vous ne voulez pas le mettre à niveau), et a également utilisé les services WCF RIA BETA ... J'ai de mauvaises nouvelles ... vous DEVEZ passer à WCF RIA Services v1 (BETA ne fonctionne pas sur vs2010 ) ... et pour cette raison ... vous devez également installer la mise à niveau de Silverlight 4 + vers le framework 4.0

Voir ceci: http://blog.nappisite.com/2010/05/updating-visual-studio-2008net-35-ria.html

Fernando Torres
la source
0

Je suis passé de Silverlight 4 à Silverlight 5 et j'ai eu ce problème. Bien que j'aie eu une référence à «System.ComponentModel.DataAnnotations» sous «Références» dans mon projet, il y avait un signe de rendement jaune qui indiquait que l'assembly précédemment référencé était introuvable. Il s'est avéré que les propriétés de la référence "System.ComponentModel.DataAnnotations" indiquaient "Specific Version = True", lorsque j'ai changé cela en "Specific Version = False", cela a résolu le problème. Cliquez avec le bouton droit sur l'assemblage "System.ComponentModel.DataAnnotations" sous "Références" et sélectionnez "Propriétés" dans le menu contextuel. Vérifiez que la valeur de la propriété pour "Version spécifique = False".

Il devait faire référence à l'ancien assemblage Silverlight 4 qui n'était plus disponible après la mise à niveau vers Silverlight 5.

césiumdeth
la source
0

System.ComponentModel.DataAnnotations est contenu dans son propre assembly, vous devez donc vous assurer que vous l'avez référencé. Tout simplement:

1). Faites un clic droit sur Soloution et choisissez ajouter.

2). Choisissez une référence dans la liste.

3). Recherchez «System.ComponentModel.DataAnnotation» et cochez la case à sa gauche et appuyez sur OK.

Travail fait, ne devrait pas avoir d'erreurs de référence.

whatdoyouNeedFromMe
la source
0

J'ai aussi ce problème. C'est très stupide quand j'ajoute un espace de noms identique avec System. J'essaye de supprimer toutes les références, mais ce n'est pas résolu. J'utilise "global :: System.ComponentModel", cela fonctionne aussi. Lorsque je supprime mon espace de noms, ce problème a été résolu.

Henri
la source
-6

J'ai eu le même problème, j'ai résolu ce problème de la manière suivante.

Faites un clic droit sur la page, sélectionnez Propriété. dans l'action de construction, sélectionnez Contenu.

J'espère que cette solution pourra vous aider.

Pankil Agrawal
la source
De quelle «page» parlez-vous? Et comment cela aide-t-il exactement?
Crono
1
Eh bien, c'est vraiment faux. Si vous faites en sorte qu'un élément du projet soit traité comme "Contenu" lors de la construction, il perdra son comportement. Donc, si vous le faites sur une classe, elle ne sera plus compilée et son code ne sera jamais appelé. Au lieu de cela, il sera copié sous forme de fichier avec les binaires de la sortie de compilation du programme. C'est pourquoi vous ne recevrez plus d'erreurs de compilation, mais ce n'est certainement pas une solution à un problème de compilation.
Ivaylo Slavov