Perché non riesco a fare riferimento a System.ComponentModel.DataAnnotations?


97

Sto cercando di utilizzare DataAnnotations nel mio progetto WPF per specificare una lunghezza massima di stringhe, con quanto segue:

using System.ComponentModel.DataAnnotations;

Tuttavia, ottengo l'errore

Il tipo o il nome dello spazio dei nomi "DataAnnotations" non esiste nello spazio dei nomi "System.ComponentModel" (manca un riferimento all'assembly?)

Ho visto altri esempi in cui DataAnnotations non esistono in questo spazio dei nomi. Sto usando C # 4. C'è qualche motivo per cui non posso usarlo? Cosa posso fare per risolverlo?


Hai installato MVC? Credo che DataAnnotations appartenga a quel pacchetto
dougajmcdonald

3
Forse "manca un riferimento all'assembly".
phoog

1
I messaggi di errore sono progettati per essere utili, non per essere ignorati.
Kendall Frey

6
Ok ragazzi, perdonatemi se sembro ignorante, ma mi riferisco all'assemblaggio System.ComponentModele utilizzo vari altri componenti in questo. Secondo @Hari di seguito, sembra che DataAnnotationsesista nel proprio assembly. Ho pensato che sarebbe esistito all'interno System.ComponentModelpoiché si trova nello stesso spazio dei nomi.
DaveDev

Risposte:


156

È necessario fare riferimento all'assembly in cui è definito questo spazio dei nomi (non viene fatto riferimento per impostazione predefinita nei modelli di Visual Studio). Apri il gestore dei riferimenti e aggiungi un riferimento all'assembly System.ComponentModel.DataAnnotations (Esplora soluzioni -> Aggiungi riferimento -> Seleziona scheda .Net -> seleziona System.ComponentModel.DataAnnotations dall'elenco)


10
Ciò che è strano qui è che VS non è stato in grado di darmi il normale "Potential Fix" per questo. Chissà perché ...
Todd Vance

In VS2019, la scheda .net non c'è (più). Controlla la risposta più recente di JohnB che funziona per me!
peter.cyc

19

Se si utilizza .NET Core o .NET Standard

uso:

Gestisci pacchetti NuGet ..

Usa Gestisci pacchetti NuGet

invece di:

Aggiungi riferimento ...

Non utilizzare Aggiungi riferimento


5
Dalla riga di comandodotnet add package System.ComponentModel.Annotations
Eric il

anche tramite l'installazione del gestore di pacchetti nuget in VSCode, - -> seguito dal comando "command + shift + p" (su Mac) - -> e digitando "Gestore pacchetti Nuget" e selezionando "aggiungi pacchetto" dall'elenco di completamento automatico - - > e digitando System .. e aspettando il completamento automatico per mostrare il pacchetto corretto e selezionando "System.ComponentModel.Annotations" - -> e selezionando il progetto in cui questo assembly deve essere incluso - -> e selezionando "ripristina" se necessario per stabilire il riferimento.
supi

13

Per fare riferimento a System.ComponentModel.DataAnnotations

In un file di codice per avere Using System.ComponentModel.DataAnnotations; all'inizio del file come:

using System.ComponentModel.DataAnnotations;

Aggiungi un riferimento .NET al tuo progetto facendo clic con il pulsante destro del mouse sul progetto in Esplora soluzioni:

inserisci qui la descrizione dell'immagine

Spero che questo ti aiuti! Questa domanda mi ha aiutato.


8

Se non lo hai nei riferimenti (come non ho fatto io) puoi anche aggiungere NuGet System.ComponentModel.Annotations per ottenere gli assembly e risolvere gli errori. (Aggiungendolo qui come questa risposta è ancora in cima a Google per l'errore)


4

Ho anche avuto lo stesso problema e l'ho risolto aggiungendo il riferimento in uno dei miei progetti che non aveva il riferimento menzionato. Se hai 2-3 progetti nella tua soluzione, controlla aggiungendo questo riferimento agli altri progetti.


2

Usa FrameWork versione 4.5 e successive per il tuo progetto, quindi il problema è risolto, poiché questo spazio dei nomi è inferiore a 4.5 e superiore.


1
non è corretto. vedi qui
itsho

Sto usando .NET 4.5.xe non è incluso. Ma allora non sto usando MVC. Questa app è un'app console senza interfaccia utente che verrà eseguita come cron job una volta al giorno. Voglio usare solo DataAnnotations nelle classi che rappresentano i membri di dati che manterranno i dati dalle colonne che recupero da ogni riga della tabella di SQL Server. Proverò ad aggiungerlo manualmente come riferimento.
MiddleAgedMutantNinjaProgrammer

Dai un'occhiata; qui
user2090762

@ user2090762: lo spazio dei nomi esiste, ma non esistono ancora tutte le classi. In particolare, EmailAddressAttribute non è disponibile fino al 4.5.
jmoreno

2

Ho scoperto che non posso fare riferimento a System.ComponentModel.DataAnnotations da Silverlight 5 con la versione seguente in (1). Ho scoperto che gli assembly Silverlight 5 non possono utilizzare gli assembly .NET, viene visualizzato l'errore "Non è possibile aggiungere un riferimento a System.ComponentModel.DataAnnotations poiché non è stato creato con il runtime Silverlight. ..." Ho intenzione di risolvere questo problema con si spera di installare il pacchetto Silverlight 5 che si trova in (2) di seguito. Se fallisce aggiornerò questo post.

[AGGIORNAMENTO: non è riuscito. Ho installato tutto ciò che riguarda Silverlight 5 e non ho la versione Silverlight dell'assembly .dll System.ComponentModel.DataAnnotations. Peccato. AGGIORNAMENTO II: ho trovato un vecchio .dll con questo nome da una precedente installazione del kit per sviluppatori Silverlight per Visual Studio 2008 o 2010. Ho aggiunto questo file e sembra che "funzioni", in quanto IntelliSense ora riconosce gli attributi sui membri della classe, come [Display(Name = "My Property Name")]. se questo funzioni o meno per tutto il resto in questo .dll non lo so.]

(1)

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

Versione installata: professionale

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


Aggiornamento III - Non sono riuscito a far funzionare System.ComponentModel.DataAnnotations.dll sul lato client, per Silverlight 5, ma stranamente sul lato server il progetto Silverlight utilizza la versione .NET v4.5.1 di questo .dll. Ma il lato client non accetterà la versione .NET e richiede una versione Silverlight di questo .dll, che a partire da questa data non riesco a trovare da nessuna parte. Quindi devi fare a meno del lato client.
Paul Dicembre

1

Ho cercato aiuto su questo argomento perché mi sono imbattuto nello stesso problema.

Sebbene la seguente potrebbe non essere la risposta alla domanda posta originariamente nel 2012, potrebbe essere una soluzione per coloro che si imbattono in questo thread.

Un modo per risolvere questo problema è controllare dove si trova il tuo progetto all'interno della soluzione. Risulta per la mia istanza (stavo cercando di installare un pacchetto NuGet ma non è stato così e si è verificato l'errore elencato) che il mio file di progetto non era incluso nella directory della soluzione sebbene fosse visualizzato in Esplora soluzioni. Ho eliminato il progetto dalla directory fuori ambito e ho aggiunto di nuovo il progetto, ma questa volta nella posizione corretta.


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

Ho eseguito l'aggiornamento da Silverlight 4 a Silverlight 5 e quindi ho riscontrato questo problema. Sebbene avessi un riferimento a "System.ComponentModel.DataAnnotations" in "Riferimenti" nel mio progetto, aveva un segno di rendimento giallo che indicava che non era possibile trovare l'assembly a cui si faceva riferimento in precedenza. Si è scoperto che le proprietà del riferimento "System.ComponentModel.DataAnnotations" indicavano "Specific Version = True", quando ho cambiato questo in "Specific Version = False" ha risolto il problema. Fare clic con il pulsante destro del mouse sull'assembly "System.ComponentModel.DataAnnotations" in "Riferimenti" e selezionare "Proprietà" dal menu di scelta rapida. Verificare che il valore della proprietà per "Specific Version = False".

Deve essere stato fatto riferimento al vecchio assembly Silverlight 4 che non era più disponibile dopo l'aggiornamento a Silverlight 5.


0

System.ComponentModel.DataAnnotations è contenuto nel proprio assembly, quindi è necessario assicurarsi di averlo referenziato. Semplicemente:

1). Fare clic con il tasto destro su Soloution e scegliere aggiungi.

2). Scegli il riferimento dall'elenco.

3). Cerca "System.ComponentModel.DataAnnotation" e seleziona la casella di controllo sul lato sinistro e premi ok.

Lavoro fatto, non dovrebbe avere alcun errore di riferimento.


0

Anch'io ho questo problema. È molto stupido quando aggiungo uno spazio dei nomi lo stesso con System. Provo a rimuovere tutti i riferimenti, ma non viene risolto. Uso "global :: System.ComponentModel", funziona pure. Quando rimuovo il mio spazio dei nomi, questo problema è stato risolto.


-6

Ho avuto lo stesso problema, ho risolto questo problema seguendo il modo.

Fare clic con il tasto destro sulla pagina, selezionare Proprietà. nell'azione di compilazione seleziona Contenuto.

Spero che questa soluzione possa aiutarti.


A quale "pagina" ti riferisci? E come aiuta esattamente?
Crono

1
Bene, questo è davvero sbagliato. Se fai in modo che un elemento del progetto venga trattato come "Contenuto" durante la compilazione, perderà il suo comportamento. Quindi, se lo fai su una classe, non verrà più compilato e il suo codice non verrà mai chiamato. Invece verrà copiato come file lungo i binari dell'output di compilazione del programma. Questo è il motivo per cui smetterai di ricevere errori di compilazione, ma sicuramente non è una soluzione a un problema di compilazione.
Ivaylo Slavov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.