Warum kann ich nicht auf System.ComponentModel.DataAnnotations verweisen?


97

Ich versuche, DataAnnotations in meinem WPF-Projekt zu verwenden, um eine maximale Länge von Zeichenfolgen anzugeben:

using System.ComponentModel.DataAnnotations;

Ich erhalte jedoch den Fehler

Der Typ- oder Namespace-Name 'DataAnnotations' ist im Namespace 'System.ComponentModel' nicht vorhanden (fehlt Ihnen eine Assemblyreferenz?)

Ich habe andere Beispiele gesehen , wo DataAnnotations sie in diesem Namensraum existiert. Ich benutze C # 4. Gibt es einen Grund, warum ich das nicht verwenden kann? Was kann ich tun, um das Problem zu beheben?


Haben Sie MVC installiert? Ich glaube, DataAnnotations gehört zu diesem Paket
Dougajmcdonald

3
Vielleicht fehlt Ihnen "eine Baugruppenreferenz".
Phoog

1
Fehlermeldungen sollen hilfreich sein und nicht ignoriert werden.
Kendall Frey

6
Ok Leute, verzeihen Sie mir, dass ich unwissend bin, aber ich beziehe mich auf die Baugruppe System.ComponentModelund verwende dabei verschiedene andere Komponenten. Laut @Hari unten scheint es, dass DataAnnotationses in einer eigenen Assembly existiert. Ich dachte, es würde innerhalb existieren, System.ComponentModelda es sich im selben Namespace befindet.
DaveDev

Antworten:


156

Sie müssen auf die Assembly verweisen, in der dieser Namespace definiert ist (in den Visual Studio-Vorlagen wird standardmäßig nicht darauf verwiesen). Öffnen Sie Ihren Referenzmanager und fügen Sie einen Verweis auf die Assembly System.ComponentModel.DataAnnotations hinzu (Lösungs-Explorer -> Referenz hinzufügen -> Registerkarte .Net auswählen -> System.ComponentModel.DataAnnotations aus der Liste auswählen).


10
Was hier seltsam ist, ist, dass VS mir nicht den normalen 'Potential Fix' für diesen geben konnte.
Todd Vance

In VS2019 ist die Registerkarte .net (nicht mehr) vorhanden. Überprüfen Sie die neuere Antwort von JohnB, die für mich funktioniert!
peter.cyc

18

Bei Verwendung von .NET Core oder .NET Standard

verwenden:

NuGet-Pakete verwalten ..

Verwenden Sie NuGet-Pakete verwalten

anstatt:

Referenz hinzufügen...

Verwenden Sie keine Referenz hinzufügen


5
Von der Kommandozeiledotnet add package System.ComponentModel.Annotations
Eric

auch über die Installation des Nuget-Paket-Managers in VSCode, - -> gefolgt vom Befehl "Befehl + Umschalt + P" (auf dem Mac) - -> und Eingabe von "Nuget-Paket-Manager" und Auswahl von "Paket hinzufügen" aus der automatisch vervollständigten Liste - - > und geben Sie System .. ein und warten Sie, bis die automatische Vervollständigung das richtige Paket anzeigt. Wählen Sie "System.ComponentModel.Annotations" - -> und wählen Sie das Projekt aus, in dem diese Assembly enthalten sein soll - -> und wählen Sie bei Bedarf "Wiederherstellen" Referenz festlegen.
Supi

13

Referenzieren von System.ComponentModel.DataAnnotations

In einer Codedatei mit Using System.ComponentModel.DataAnnotations; am Anfang der Datei wie:

using System.ComponentModel.DataAnnotations;

Fügen Sie Ihrem Projekt einen .NET-Verweis hinzu, indem Sie im Solution Explorer mit der rechten Maustaste auf das Projekt klicken:

Geben Sie hier die Bildbeschreibung ein

Hoffe das hilft! Diese Frage hat mir geholfen.


8

Wenn Sie es nicht in Referenzen haben (wie ich es nicht getan habe), können Sie auch NuGet System.ComponentModel.Annotations hinzufügen, um die Assemblys abzurufen und die Fehler zu beheben. (Fügen Sie es hier hinzu, da diese Antwort für den Fehler immer noch oben auf Google steht.)


4

Ich hatte auch das gleiche Problem und löste es, indem ich die Referenz in eines meiner Projekte einfügte, das die erwähnte Referenz nicht hatte. Wenn Ihre Lösung 2-3 Projekte enthält, überprüfen Sie dies, indem Sie diesen Verweis zu den anderen Projekten hinzufügen.


2

Verwenden Sie FrameWork Version 4.5 und höher für Ihr Projekt, um das Problem zu beheben. Dieser Namespace befindet sich unter 4.5 und höher.


1
das ist falsch siehe hier
itsho

Ich verwende .NET 4.5.x und es ist nicht enthalten. Aber dann benutze ich MVC nicht. Diese App ist eine Konsolen-App ohne Benutzeroberfläche, die einmal täglich als Cron-Job ausgeführt wird. Ich möchte DataAnnotations nur in den Klassen verwenden, die die Datenelemente darstellen, die die Daten aus Spalten enthalten, die ich aus jeder SQL Server-Tabellenzeile abrufe. Ich werde versuchen, es manuell als Referenz hinzuzufügen.
MiddleAgedMutantNinjaProgrammer

Schau es dir an; hier
user2090762

@ user2090762: Der Namespace ist vorhanden, aber noch nicht alle Klassen vorhanden. Insbesondere ist das EmailAddressAttribute erst ab 4.5 verfügbar.
jmoreno

2

Ich habe festgestellt, dass ich nicht auf System.ComponentModel.DataAnnotations aus Silverlight 5 mit der folgenden Version unter (1) verweisen kann. Ich habe festgestellt, dass Silverlight 5-Assemblys keine .NET-Assemblys verwenden können. Es wird der Fehler "Sie können keinen Verweis auf System.ComponentModel.DataAnnotations hinzufügen, da es nicht für die Silverlight-Laufzeit erstellt wurde. ..." angezeigt. Ich habe vor, dies zu umgehen Hoffentlich wird das Silverlight 5-Paket unter (2) unten installiert. Wenn dies fehlschlägt, werde ich diesen Beitrag aktualisieren.

[UPDATE: Es ist fehlgeschlagen. Ich habe alles in Bezug auf Silverlight 5 installiert und habe nicht die Silverlight-Version der DLL-Assembly System.ComponentModel.DataAnnotations. Schade. UPDATE II: Ich habe eine alte DLL mit diesem Namen aus einer früheren Installation des Silverlight-Entwicklerkits für Visual Studio 2008 oder 2010 gefunden. Ich habe diese Datei hinzugefügt und sie scheint zu funktionieren, da IntelliSense jetzt Attribute für Klassenmitglieder erkennt. sowie [Display(Name = "My Property Name")]. Ob dies für alles andere in dieser DLL funktioniert oder nicht, weiß ich nicht.]

(1)

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

Installierte Version: Professional

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


Update III - Ich konnte System.ComponentModel.DataAnnotations.dll für Silverlight 5 nicht auf der Clientseite zum Laufen bringen, aber seltsamerweise verwendet das Silverlight-Projekt auf der Serverseite die .NET v4.5.1-Version dieser DLL. Die Clientseite akzeptiert die .NET-Version jedoch nicht und verlangt eine Silverlight-Version dieser DLL, die ich ab diesem Datum nirgendwo finden kann. Sie müssen also auf der Client-Seite darauf verzichten.
Paul

1

Ich habe zu diesem Thema nach Hilfe gesucht, als ich auf dasselbe Problem gestoßen bin.

Obwohl das Folgende möglicherweise nicht die Antwort auf die ursprünglich 2012 gestellte Frage ist, ist es möglicherweise eine Lösung für diejenigen, die auf diesen Thread stoßen.

Eine Möglichkeit , dies zu lösen, besteht darin, zu überprüfen, wo sich Ihr Projekt in der Lösung befindet. Es stellte sich für meine Instanz heraus (ich habe versucht, ein NuGet-Paket zu installieren, dies war jedoch nicht der Fall, und der aufgeführte Fehler trat auf), dass meine Projektdatei nicht im Lösungsverzeichnis enthalten war, obwohl sie im Lösungs-Explorer angezeigt wurde. Ich habe das Projekt aus dem Verzeichnis außerhalb des Gültigkeitsbereichs gelöscht und das Projekt erneut hinzugefügt, diesmal jedoch an der richtigen Stelle.


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 .

0

Wenn Sie versucht haben, Visual Studio von vs2008 auf vs2010 zu aktualisieren. Und Ihre App verwendet Framework 3.5 (und Sie möchten es nicht aktualisieren) und auch WCF RIA Services BETA ... Ich habe schlechte Nachrichten ... Sie MÜSSEN auf WCF RIA Services v1 aktualisieren (BETA funktioniert nicht unter vs2010) ) ... und aus diesem Grund ... müssen Sie auch das Silverlight 4 + Upgrade auf Framework 4.0 installieren

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


0

Ich habe ein Upgrade von Silverlight 4 auf Silverlight 5 durchgeführt und hatte dann dieses Problem. Obwohl ich in meinem Projekt unter "Referenzen" einen Verweis auf "System.ComponentModel.DataAnnotations" hatte, hatte er ein gelbes Ertragszeichen, das darauf hinwies, dass die zuvor referenzierte Assembly nicht gefunden werden konnte. Es stellte sich heraus, dass die Eigenschaften der Referenz "System.ComponentModel.DataAnnotations" "Spezifische Version = Wahr" angaben. Als ich dies in "Spezifische Version = Falsch" änderte, wurde das Problem behoben. Klicken Sie mit der rechten Maustaste auf die Assembly "System.ComponentModel.DataAnnotations" unter "Referenzen" und wählen Sie "Eigenschaften" aus dem Kontextmenü. Überprüfen Sie, ob der Eigenschaftswert für "Spezifische Version = Falsch" ist.

Es muss auf die alte Silverlight 4-Assembly verwiesen haben, die nach dem Upgrade auf Silverlight 5 nicht mehr verfügbar war.


0

System.ComponentModel.DataAnnotations ist in einer eigenen Assembly enthalten, daher müssen Sie sicherstellen, dass Sie es referenziert haben. Einfach einfach:

1). Klicken Sie mit der rechten Maustaste auf Soloution und wählen Sie Hinzufügen.

2). Wählen Sie eine Referenz aus der Liste.

3). Suchen Sie nach "System.ComponentModel.DataAnnotation" und aktivieren Sie das Kontrollkästchen auf der linken Seite und drücken Sie OK.

Arbeit erledigt, sollte keine Referenzfehler haben.


0

Ich habe auch dieses Problem. Das ist sehr dumm, wenn ich mit System einen gleichen Namespace hinzufüge. Ich versuche alle Referenzen zu entfernen, aber es ist nicht gelöst. Ich benutze "global :: System.ComponentModel", es funktioniert auch. Wenn ich meinen Namespace entferne, wurde dieses Problem behoben.


-6

Ich hatte das gleiche Problem, ich löste dieses Problem auf folgende Weise.

Klicken Sie mit der rechten Maustaste auf die Seite und wählen Sie Eigenschaft. Wählen Sie in der Build-Aktion Inhalt aus.

Hoffe, dass diese Lösung Ihnen helfen kann.


Auf welche "Seite" beziehen Sie sich? Und wie hilft das genau?
Crono

1
Nun, das ist wirklich falsch. Wenn Sie festlegen, dass ein Projektelement während der Erstellung als "Inhalt" behandelt wird, verliert es sein Verhalten. Wenn Sie es also für eine Klasse tun, wird es nicht mehr kompiliert und der Code wird niemals aufgerufen. Stattdessen wird es als Datei entlang der Binärdateien der Programmkompilierungsausgabe kopiert. Aus diesem Grund werden keine Kompilierungsfehler mehr angezeigt, dies ist jedoch definitiv keine Lösung für ein Kompilierungsproblem.
Ivaylo Slavov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.