Dlaczego nie mogę odwołać się do System.ComponentModel.DataAnnotations?

100

Próbuję użyć DataAnnotations w moim projekcie WPF, aby określić maksymalną długość ciągów, z następującymi elementami:

using System.ComponentModel.DataAnnotations;

Jednak pojawia się błąd

Nazwa typu lub przestrzeni nazw „DataAnnotations” nie istnieje w przestrzeni nazw „System.ComponentModel” (czy brakuje odwołania do zestawu?)

Widziałem inne przykłady, gdzie DataAnnotations nie istnieją w tej przestrzeni nazw. Używam C # 4. Czy jest jakiś powód, dla którego nie mogę tego używać? Co mogę zrobić, żeby to naprawić?

DaveDev
źródło
Czy masz zainstalowany MVC? Wierzę, że DataAnnotations należy do tego pakietu
dougajmcdonald
3
Być może „brakuje odwołania do zestawu”.
phoog
1
Komunikaty o błędach mają być pomocne i nie należy ich ignorować.
Kendall Frey,
6
Ok chłopaki, wybaczcie mi, że wyglądam na ignoranta, ale odnoszę się do montażu System.ComponentModeli używam w tym różnych innych komponentów. Według @Hari poniżej wydaje się, że DataAnnotationsistnieje w swoim własnym zestawie. Myślałem, że będzie istnieć wewnątrz, System.ComponentModelponieważ jest w tej samej przestrzeni nazw.
DaveDev

Odpowiedzi:

156

Musisz odwołać się do zestawu, w którym jest zdefiniowana ta przestrzeń nazw (domyślnie nie ma do niej odwołań w szablonach programu Visual Studio). Otwórz menedżera odniesień i dodaj odwołanie do zestawu System.ComponentModel.DataAnnotations (Eksplorator rozwiązań -> Dodaj odniesienie -> Wybierz kartę .Net -> wybierz z listy System.ComponentModel.DataAnnotations)

Hari
źródło
10
Dziwne jest to, że VS nie był w stanie zapewnić mi normalnej „potencjalnej poprawki” dla tego. Ciekawe, dlaczego ...
Todd Vance,
W VS2019 karty .net nie ma (już). Sprawdź najnowszą odpowiedź JohnB, która działa dla mnie!
peter.cyc
23

W przypadku korzystania z platformy .NET Core lub .NET Standard

posługiwać się:

Zarządzaj pakietami NuGet.

Użyj opcji Zarządzaj pakietami NuGet

zamiast:

Dodaj odniesienie ...

Nie używaj opcji Dodaj odniesienie

JohnB
źródło
5
Z wiersza poleceńdotnet add package System.ComponentModel.Annotations
Eric
również poprzez zainstalowanie menedżera pakietów NuGet w VSCode, - -> następnie polecenie „command + shift + p” (na mac) - -> i wpisanie „Menedżer pakietów NuGet” i wybranie „dodaj pakiet” z listy autouzupełniania - - > i wpisując System .. i czekając na autouzupełnianie, aby pokazać poprawny pakiet i wybierając "System.ComponentModel.Annotations" - -> i wybierając projekt, w którym ten zestaw ma być dołączony - -> i wybierając "przywróć", jeśli to konieczne, ustalić odniesienie.
supi
13

Aby odwołać się do System.ComponentModel.DataAnnotations

W pliku kodu, aby mieć Using System.ComponentModel.DataAnnotations; u góry pliku, na przykład:

using System.ComponentModel.DataAnnotations;

Dodaj odwołanie .NET do projektu, klikając prawym przyciskiem myszy projekt w eksploratorze rozwiązań:

wprowadź opis obrazu tutaj

Mam nadzieję że to pomoże! To pytanie pomogło mi.

Catto
źródło
8

Jeśli nie masz go w odwołaniach (tak jak ja nie), możesz również dodać NuGet System.ComponentModel.Annotations, aby pobrać zestawy i rozwiązać błędy. (Dodanie go tutaj, ponieważ ta odpowiedź nadal znajduje się na górze Google dla błędu)

Rodger
źródło
4

Miałem również ten sam problem i rozwiązałem go, dodając odniesienie w jednym z moich projektów, który nie miał wspomnianego odniesienia. Jeśli masz 2-3 projekty w swoim rozwiązaniu, sprawdź, dodając to odniesienie do innych projektów.

Ashish Sahu
źródło
2

Użyj FrameWork w wersji 4.5 i nowszych dla swojego projektu, a następnie rozwiązuj problem, ponieważ ta przestrzeń nazw jest poniżej 4.5 i nowszych.

user2090762
źródło
1
to jest niepoprawne. patrz tutaj
itsho
Używam platformy .NET 4.5.x i nie jest ona uwzględniona. Ale wtedy nie używam MVC. Ta aplikacja jest aplikacją konsolową bez interfejsu użytkownika, która będzie uruchamiana jako zadanie cron raz dziennie. Chcę używać adnotacji danych tylko w klasach, które reprezentują elementy członkowskie danych, które będą przechowywać dane z kolumn pobranych z każdego wiersza tabeli programu SQL Server. Spróbuję dodać go ręcznie jako odniesienie.
MiddleAgedMutantNinjaProgrammer
Spójrz na to; tutaj
user2090762
@ user2090762: przestrzeń nazw istnieje, ale nie wszystkie klasy jeszcze istnieją. W szczególności EmailAddressAttribute nie jest dostępny do 4.5.
jmoreno
2

Zauważyłem, że nie mogę odwoływać się do System.ComponentModel.DataAnnotations z Silverlight 5 z poniższą wersją pod adresem (1). Okazało się, że zestawy Silverlight 5 nie mogą używać zestawów .NET, powoduje to błąd „Nie można dodać odwołania do System.ComponentModel.DataAnnotations, ponieważ nie zostało ono zbudowane w odniesieniu do środowiska wykonawczego Silverlight. ...” Planuję obejść ten problem przez mam nadzieję, że zainstaluję pakiet Silverlight 5 znajdujący się w (2) poniżej. Jeśli to się nie powiedzie, zaktualizuję ten post.

[UPDATE: nie powiodło się. Zainstalowałem wszystko, co dotyczy Silverlight 5 i nie mam wersji Silverlight zestawu .dll System.ComponentModel.DataAnnotations. Szkoda. AKTUALIZACJA II: Znalazłem stary plik .dll o tej nazwie z poprzedniej instalacji zestawu deweloperskiego Silverlight dla programu Visual Studio 2008 lub 2010. Dodałem ten plik i wydaje się, że „działa”, ponieważ technologia IntelliSense rozpoznaje teraz atrybuty członków klasy, takie jak [Display(Name = "My Property Name")]. Czy to działa na wszystko inne w tym pliku .dll, nie wiem.]

(1)

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

Zainstalowana wersja: Professional

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

Paul grudzień
źródło
Aktualizacja III - Nie mogłem zmusić System.ComponentModel.DataAnnotations.dll do pracy po stronie klienta dla Silverlight 5, ale dziwnie po stronie serwera projekt Silverlight używa wersji .NET v4.5.1 tego pliku .dll. Ale strona klienta nie zaakceptuje wersji .NET i wymaga wersji Silverlight tego pliku .dll, której na dzień dzisiejszy nie mogę nigdzie znaleźć. Więc musisz obejść się bez po stronie klienta.
Paul, grudzień
1

Szukałem pomocy na ten temat, gdy natknąłem się na ten sam problem.

Chociaż poniższa odpowiedź może nie być odpowiedzią na pytanie zadane pierwotnie w 2012 roku, może być rozwiązaniem dla tych, którzy zetkną się z tym wątkiem.

Sposobem rozwiązania tego problemu jest sprawdzenie, gdzie projekt znajduje się w rozwiązaniu. Okazuje się, że dla mojego wystąpienia (próbowałem zainstalować pakiet NuGet, ale nie udało się i pojawił się wymieniony błąd), że mój plik projektu nie został uwzględniony w katalogu rozwiązania, chociaż jest wyświetlany w eksploratorze rozwiązań. Usunąłem projekt z katalogu poza zakresem i ponownie dodałem projekt, ale tym razem we właściwej lokalizacji.

Guybrush Threepwood
źródło
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
źródło
0

Jeśli próbujesz zaktualizować program Visual Studio z vs2008 do vs2010. Twoja aplikacja korzysta z frameworku 3.5 (i nie chcesz go aktualizować), a także korzystała z usług WCF RIA BETA ... Mam złą wiadomość ... MUSISZ uaktualnić do usług WCF RIA v1 (BETA nie działa na vs2010 ) ... iz tego powodu ... musisz także zainstalować aktualizację Silverlight 4 + do frameworka 4.0

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

Fernando Torres
źródło
0

Zaktualizowałem Silverlight 4 do Silverlight 5 i wtedy miałem ten problem. Chociaż miałem odniesienie do „System.ComponentModel.DataAnnotations” w sekcji „References” w moim projekcie, było ono oznaczone żółtym znakiem wydajności, który wskazywał, że nie można znaleźć zestawu, do którego się odwołano. Okazało się, że właściwości odwołania „System.ComponentModel.DataAnnotations” wskazywały na „Specific Version = True”, a kiedy zmieniłem to na „Specific Version = False”, rozwiązało to problem. Kliknij prawym przyciskiem myszy zespół „System.ComponentModel.DataAnnotations” w sekcji „References” i wybierz „Właściwości” z menu kontekstowego. Sprawdź, czy wartość właściwości „Określona wersja = Fałsz”.

Musiał odnosić się do starego zestawu Silverlight 4, który nie był już dostępny po aktualizacji do Silverlight 5.

cezu
źródło
0

System.ComponentModel.DataAnnotations jest zawarta w swoim własnym zestawie, więc musisz się upewnić, że jest to odniesienie. Po prostu:

1). Kliknij prawym przyciskiem myszy Soloution i wybierz dodaj.

2). Wybierz referencję z listy.

3). Wyszukaj „System.ComponentModel.DataAnnotation” i zaznacz pole wyboru po jego lewej stronie i naciśnij OK.

Praca wykonana, nie powinno mieć żadnych błędów referencyjnych.

Czego ode mnie potrzebujesz
źródło
0

Ja też mam ten problem. To bardzo głupie, gdy dodaję przestrzeń nazw taką samą, jak System. Próbuję usunąć wszystkie odniesienia, ale nie zostało to rozwiązane. Używam "global :: System.ComponentModel", to też działa. Problem został rozwiązany po usunięciu mojej przestrzeni nazw.

Henz
źródło
-6

Miałem ten sam problem, rozwiązałem ten problem podążając drogą.

Kliknij stronę prawym przyciskiem myszy i wybierz opcję Właściwość. w akcji kompilacji wybierz Zawartość.

Mam nadzieję, że to rozwiązanie może ci pomóc.

Pankil Agrawal
źródło
Do której „strony” się odnosisz? Jak to dokładnie pomaga?
Crono,
1
Cóż, to jest naprawdę złe. Jeśli sprawisz, że element projektu będzie traktowany jako „Treść” podczas kompilacji, utraci on swoje zachowanie. Więc jeśli zrobisz to na klasie, nie będzie już kompilowana, a jej kod nigdy nie zostanie wywołany. Zamiast tego zostanie skopiowany jako plik wraz z plikami binarnymi wyniku kompilacji programu. Dlatego przestaniesz otrzymywać błędy kompilacji, ale zdecydowanie nie jest to rozwiązanie problemu z kompilacją.
Ivaylo Slavov