¿Por qué no puedo hacer referencia a System.ComponentModel.DataAnnotations?

97

Estoy tratando de usar DataAnnotations en mi proyecto WPF para especificar una longitud máxima de cadenas, con lo siguiente:

using System.ComponentModel.DataAnnotations;

Sin embargo, me sale el error

El tipo o nombre del espacio de nombres 'DataAnnotations' no existe en el espacio de nombres 'System.ComponentModel' (¿le falta una referencia de ensamblado?)

He visto otros ejemplos en los que DataAnnotations no existen en este espacio de nombres. Estoy usando C # 4. ¿Hay alguna razón por la que no pueda usar esto? ¿Que puedo hacer para arreglarlo?

DaveDev
fuente
¿Tiene MVC instalado? Creo que DataAnnotations pertenece a ese paquete
dougajmcdonald
3
Quizás le "falta una referencia de ensamblaje".
phoog
1
Los mensajes de error están diseñados para ser útiles, no para ignorarlos.
Kendall Frey
6
Ok chicos, perdonadme por parecer ignorante, pero estoy haciendo referencia al ensamblaje System.ComponentModely usando varios otros componentes en eso. Según @Hari a continuación, parece que DataAnnotationsexiste en su propia asamblea. Pensé que existiría dentro, System.ComponentModelya que está en el mismo espacio de nombres.
DaveDev

Respuestas:

156

Debe hacer referencia al ensamblado en el que se define este espacio de nombres (no se hace referencia a él de forma predeterminada en las plantillas de Visual Studio). Abra su administrador de referencias y agregue una referencia al ensamblado System.ComponentModel.DataAnnotations (Explorador de soluciones -> Agregar referencia -> Seleccionar pestaña .Net -> seleccione System.ComponentModel.DataAnnotations de la lista)

Hari
fuente
10
Lo que es extraño aquí es que VS no pudo darme la 'solución potencial' normal para este. Me pregunto por qué ...
Todd Vance
En VS2019, la pestaña .net ya no está allí. ¡Compruebe la respuesta más reciente de JohnB que me funciona!
peter.cyc
19

Si usa .NET Core o .NET Standard

utilizar:

Administrar paquetes NuGet ...

Usar Administrar paquetes NuGet

en vez de:

Añadir referencia...

No use Agregar referencia

JohnB
fuente
5
Desde la línea de comandodotnet add package System.ComponentModel.Annotations
Eric
también mediante la instalación del administrador de paquetes nuget en VSCode, - -> seguido del comando "comando + shift + p" (en mac) - -> y escribiendo "Administrador de paquetes Nuget" y seleccionando "agregar paquete" de la lista autocompletada - - > y escribiendo System .. y esperando a que se autocomplete para mostrar el paquete correcto y seleccionando "System.ComponentModel.Annotations" - -> y seleccionando el proyecto donde se debe incluir este ensamblaje - -> y seleccionando "restaurar" si es necesario establecer la referencia.
supi
13

Para hacer referencia a System.ComponentModel.DataAnnotations

En un archivo de código para tener Using System.ComponentModel.DataAnnotations; en la parte superior del archivo como:

using System.ComponentModel.DataAnnotations;

Agregue una referencia .NET a su proyecto haciendo clic derecho en el proyecto en el explorador de soluciones:

ingrese la descripción de la imagen aquí

¡Espero que esto ayude! Esta pregunta me ayudó.

Catto
fuente
8

Si no lo tiene en las referencias (como yo no), también puede agregar NuGet System.ComponentModel.Annotations para obtener los ensamblados y resolver los errores. (Agregándolo aquí ya que esta respuesta sigue siendo la mejor de Google para el error)

Rodger
fuente
4

También tuve el mismo problema y lo resolví agregando la referencia en uno de mis proyectos que no tenía la referencia mencionada. Si tiene 2-3 proyectos en su solución, verifique agregando esta referencia a los otros proyectos.

Ashish Sahu
fuente
2

Utilice FrameWork versión 4.5 y superior para su proyecto y luego resuelva el problema, porque este espacio de nombres está por debajo de 4.5 y superior.

usuario2090762
fuente
1
eso es incorrecto. ver aquí
itsho
Estoy usando .NET 4.5.xy no está incluido. Pero entonces no estoy usando MVC. Esta aplicación es una aplicación de consola sin interfaz de usuario que se ejecutará como un trabajo cron una vez al día. Solo quiero usar DataAnnotations en las clases que representan los miembros de datos que contendrán los datos de las columnas que recupero de cada fila de la tabla de SQL Server. Intentaré agregarlo manualmente como referencia.
MiddleAgedMutantNinjaProgrammer
Échale un vistazo; aquí
user2090762
@ user2090762: el espacio de nombres existe, pero aún no existen todas las clases. En particular, EmailAddressAttribute no está disponible hasta la 4.5.
jmoreno
2

Descubrí que no puedo hacer referencia a System.ComponentModel.DataAnnotations de Silverlight 5 con la siguiente versión en (1). Descubrí que los ensamblajes de Silverlight 5 no pueden usar ensamblajes .NET, da el error "No puede agregar una referencia a System.ComponentModel.DataAnnotations ya que no se construyó en el tiempo de ejecución de Silverlight. ..." Planeo solucionar esto por con suerte instalando el paquete Silverlight 5 que se encuentra en (2) a continuación. Si esto falla, actualizaré esta publicación.

[ACTUALIZACIÓN: falló. Instalé todo lo relacionado con Silverlight 5 y no tengo la versión Silverlight del ensamblaje .dll System.ComponentModel.DataAnnotations. Demasiado. ACTUALIZACIÓN II: Encontré un antiguo .dll que tiene este nombre de una instalación anterior del kit de desarrollador de Silverlight para Visual Studio 2008 o 2010. Agregué este archivo y parece que 'funciona', ya que IntelliSense ahora reconoce atributos en los miembros de la clase, como [Display(Name = "My Property Name")]. si esto funciona o no para todo lo demás en este .dll, no lo sé].

(1)

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

Versión instalada: profesional

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

Paul diciembre
fuente
Actualización III: no pude hacer que System.ComponentModel.DataAnnotations.dll funcione en el lado del cliente, para Silverlight 5, pero extrañamente en el lado del servidor, el proyecto Silverlight usa la versión .NET v4.5.1 de este .dll muy bien. Pero el lado del cliente no aceptará la versión .NET y exige una versión Silverlight de este .dll, que a la fecha no puedo encontrar en ninguna parte. Por lo que debe prescindir del lado del cliente.
Paul diciembre
1

Busqué ayuda sobre este tema porque encontré el mismo problema.

Aunque lo siguiente puede no ser la respuesta a la pregunta formulada originalmente en 2012, puede ser una solución para quienes se encuentren con este hilo.

Una forma de resolver esto es verificar dónde se encuentra su proyecto dentro de la solución. Resulta que para mi instancia (estaba intentando instalar un paquete NuGet pero no lo hizo y apareció el error enumerado) que mi archivo de proyecto no estaba incluido en el directorio de la solución, aunque se muestra en el explorador de la solución. Eliminé el proyecto del directorio fuera de alcance y volví a agregar el proyecto, pero esta vez dentro de la ubicación correcta.

Guybrush Threepwood
fuente
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
fuente
0

Si intentó actualizar Visual Studio de vs2008 a vs2010. Y su aplicación usa framework 3.5 (y no desea actualizarlo), y también usó WCF RIA Services BETA ... Tengo malas noticias ... DEBE actualizar a WCF RIA Services v1 (BETA no funciona en vs2010 ) ... y debido a esto ... también tienes que instalar Silverlight 4 + actualizar a framework 4.0

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

Fernando Torres
fuente
0

Actualicé de Silverlight 4 a Silverlight 5 y luego tuve este problema. Aunque tenía una referencia a "System.ComponentModel.DataAnnotations" en "References" en mi proyecto, tenía un signo de rendimiento amarillo que indicaba que no se pudo encontrar el ensamblado al que se hizo referencia anteriormente. Resultó que las propiedades de la referencia "System.ComponentModel.DataAnnotations" indicaban "Versión específica = Verdadero", cuando cambié esto a "Versión específica = Falso", solucionó el problema. Haga clic con el botón derecho en el ensamblaje "System.ComponentModel.DataAnnotations" en "Referencias" y seleccione "Propiedades" en el menú contextual. Compruebe que el valor de la propiedad para "Versión específica = Falso".

Debe haber hecho referencia al antiguo ensamblaje de Silverlight 4 que ya no estaba disponible después de la actualización a Silverlight 5.

cesiumdeth
fuente
0

System.ComponentModel.DataAnnotations está contenido en su propio ensamblado, por lo que debe asegurarse de tener una referencia. Así de simple:

1). Haga clic derecho en Soloution y elija agregar.

2). Elija una referencia de la lista.

3). Busque "System.ComponentModel.DataAnnotation" y marque la casilla de verificación en su lado izquierdo y presione ok.

Trabajo hecho, no debería tener ningún error de referencia.

que necesitas de mi
fuente
0

También tengo este problema. Eso es muy estúpido cuando agrego un espacio de nombres igual con System. Intento eliminar todas las referencias, pero no se resuelve. Yo uso "global :: System.ComponentModel", también está funcionando. Cuando elimino mi espacio de nombres, este problema se ha resuelto.

Enrique
fuente
-6

Tuve el mismo problema, resolví este problema de la siguiente manera.

Haga clic derecho en la página, seleccione Propiedad. en la acción de compilación, seleccione Contenido.

Espero que esta solución pueda ayudarte.

Pankil Agrawal
fuente
¿A qué "página" te refieres? ¿Y cómo ayuda eso exactamente?
Crono
1
Bueno, esto está realmente mal. Si hace que un elemento del proyecto se trate como "Contenido" durante la compilación, perderá su comportamiento. Entonces, si lo hace en una clase, ya no se compilará y su código nunca se llamará. En su lugar, se copiará como un archivo junto con los binarios de la salida de compilación del programa. Es por eso que dejará de recibir errores de compilación, pero definitivamente no es una solución a un problema de compilación.
Ivaylo Slavov