2010-11-19 9 views
112

estoy recibiendo este error:espacio de nombre no reconocido (a pesar de que está allí)

The type or namespace name 'AutoMapper' could not be found (are you missing a using directive or an assembly reference?)

Lo curioso es que tengo que la referencia en mi proyecto ya:

ProjectThatFails

Y este es mi código:

using System.Collections.Generic; 
using DataContract; 
using SelectorDAL; 
using AutoMapper; 

namespace SpecimenSelect 
{ 
    public class SpecimenSelect : ISpecimenSelect 
    { 
     public SpecimenSelect() 
     { 
      SetupMaps(); 
     } 

     private static void SetupMaps() 
     { 
      Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>(); 
     } 

La otra cosa extraña es que tengo otras dos p en mi solución que ambos usan AutoMapper y hacen referencia al mismo archivo AutoMapper.dll exacto. Ambos funcionan perfectamente bien.

Aquí está una captura de pantalla de una:

ProjectThatWorks

y aquí es que el código (que compila bien):

using System.Collections.Generic; 
using AutoMapper; 
using DataContract; 
using SelectorDAL; 

namespace PatientSelect 
{ 

    public class PatientSelect : IPatientSelect 
    { 
     public PatientSelect() 
     { 
      SetupMaps(); 
     } 

     private void SetupMaps() 
     { 
      Mapper.CreateMap<Patient, PatientContract>(); 
      Mapper.CreateMap<OrderedTest, OrderedTestsContract>(); 
      Mapper.CreateMap<Gender, GenderContract>(); 
     } 

Ambas referencias parecen tener los mismos datos sobre las propiedades página.

¿Qué me estoy perdiendo?

me trataron:

  1. reiniciar Visual Studio
  2. Referencing sin instrucción using (es decir AutoMapper.Mapper.CreateMap)
  3. Limpiar y Reconstruir

¿Alguna otra idea?

+1

es incorrecta la trayectoria de referencia? Tal vez se agregó con una ruta absoluta, pero la DLL se ha movido desde entonces? – kevingessner

Respuesta

211

Asegúrese de que su proyecto no esté configurado para usar .NET Framework 4 Client Profile.

Puede comprobar/cambiar esto mediante su proyecto haciendo clic derecho (no la solución), seleccione Propiedades ->aplicación - Marco>Objetivo. El marco objetivo es un menú desplegable en esa página.

Este es un problema en Visual Studio (Incluso iría tan lejos como para llamarlo un error). AutoMapper requiere conjuntos que están excluidos de .NET Framework 4 Client Profile. Como su proyecto está usando esa versión del framework, se rompe.

Un error similar se propagan al proceso de acumulación cuando la versión de .NET Framework para el proyecto está haciendo referencia es más alto que el proyecto de remisión. es decir, un proyecto orientado a 4.5 que hace referencia a un proyecto orientado a 4.5.1 le dará el mismo error.

Es necesario que haya un mensaje de error mejor cuando esto ocurre porque no hay una explicación racional de por qué no construiría como el mensaje de error que dice hacer referencia a un conjunto claramente Ha hecho referencia.

+6

¡Este era exactamente el problema! ¡Gracias! Estoy de acuerdo en que este error es muy engañoso. Tampoco entiendo por qué el perfil del cliente es el predeterminado para un nuevo proyecto. La mayoría de las computadoras van a tener el .NET framework completo ¿verdad? (¿O MS acaba de poner el marco de cliente en Windows Update?) De todos modos, todas las computadoras para las que desarrolle tendrán el marco completo. Ojalá hubiera una forma de cambiar el valor predeterminado para un proyecto nuevo, así que me muerde así. De todas formas. ¡Gracias de nuevo! Estaba atrapado y no pensé en mirar hacia allí. – Vaccano

+0

¡Muchas gracias por la solución! – Zaffiro

+0

¡Tenía exactamente el mismo problema! Los tipos no fueron reconocidos en mi proyecto de servicio de Windows, incluso si hubiera agregado las referencias correctamente. Cambié el marco de destino de .NET Framework 4 Client Profile a .NET Framework 4. Tenga en cuenta que también tuve que volver a agregar mis referencias para hacerlo compilar. Parece ser un problema en Visual Studio 2010. Gracias y saludos desde Budapest. –

25

Pregunta estúpida: ¿Puede haber dos de automapper.dll?¿Uno con un espacio de nombres AutoMapper y otro sin? Confirme las rutas en ambos proyectos.

Allí ...

también notó la orden del uso de es diferente. No debería importar, pero ¿has intentado mezclarlos?

+8

-1 Esa no es una pregunta estúpida ... A falta de encontrar una solución, SO tiene preguntas y soluciones para aquellos que pueden haber intentado todo lo que consideran relevante. Si has estado allí, y has conocido estos problemas, ¡entonces sabrás que no es una pregunta estúpida! He estado allí también ... –

+0

No lo pensé, ¿por qué los votos a la baja? – n8wrl

+2

Pregunta estúpida? No lo creo. Tuve el mismo problema y me tomó una hora darme cuenta de que tenía que cambiar el marco de Target en Visual Studio de '.NET Framework 4 Client Profile' a '.NET Framework 4'. – ChrisNel52

3

Quizás la tabla de tipos del proyecto esté en un estado incorrecto. Intentaría eliminar/agregar la referencia y, si eso no funcionaba, crear otro proyecto, importar mi código y ver si funcionaba.

me encontré con esto mientras que el uso de VS 2005, cabría esperar que MS haber fijado ese particular problema por ahora, sin embargo ..

+0

podría solucionar este problema? –

6

Tengo un problema similar con referencias no están reconocidos en VS2010 y las respuestas de este documento no fueron capaces de corregirlo

El problema en mi solución estaba relacionado con la extensión de la ruta donde se encontraba el proyecto al que se hacía referencia. Como estoy trabajando con SVN, hice una rama de un repositorio para hacer algunas pruebas y esa rama aumentó dos niveles en la estructura de la ruta, por lo que la ruta se hizo demasiado larga para ser utilizable en Windows. Esto no arrojó ningún error, pero no reconoció el espacio de nombres de la referencia del proyecto. Cuando corrijo la ubicación del proyecto para tener un camino más pequeño todo fue bien.

+2

Este también fue un problema para nosotros y fue la longitud de la ruta lo que causaba el problema. VS necesita hacer un mejor trabajo al proporcionar un error mejor en ese caso, ya que el error que obtuvimos fue bastante engañoso. – VoodooChild

14

Si su clase no se compila, aunque sea en el proyecto comprobar estos:

  1. si nombre de la clase es exactamente el mismo
  2. si el espacio de nombres es exactamente el mismo
  3. si las propiedades de clase show build action = compilar
+5

Copié un archivo .cs con Explorer y luego lo incluí en el proyecto. VS.Net configuró la acción de compilación como "Contenido" en lugar de "Compilar", por lo que no reconoció el espacio de nombre. ¡Buena atrapada! – AUSteve

+3

build action = compilar fue mi problema !!! ¡¡¡¡¡¡¡Gracias!!!!!!! – pashute

+0

Agregué la clase a través de la función Agregar -> Clase y configuró la acción de compilación al contenido. Sólo curiosidad por qué? Esto me ayudó de todos modos, algo tan simple, pero nunca antes encontrado. Es por eso que ni siquiera me molesté en buscar allí, y busqué en Google en su lugar. – Anomaly

4

En mi caso, el dll referenciado fue compilado en la versión superior de .Net Framework. Después de agregar la referencia, podría usarla. Pero tan pronto como hice una compilación, aparecerá el error de "referencia faltante". Actualizo el dll, el error irá, pero nunca se compilará. Este post me hizo verificar la versión del framework y así pude resolverlo construyendo el proyecto referenciado en la misma versión.

2

La pregunta ya ha sido adjudicada, pero hay detalles adicionales aún no descritos que deben ser verificados.

Yo también estaba teniendo este comportamiento, donde se hizo referencia al proyecto B en el proyecto A, pero el espacio de nombres del proyecto B no se reconoció en el proyecto A. Después de excavar, encontré que mi ruta era demasiado larga. Al reducir la ruta de los proyectos (tanto A como B) las referencias se hicieron visibles y disponibles.

Probé esta teoría creando el proyecto C a una profundidad de trayectoria mucho menor. Hice referencia al proyecto C en el proyecto A. Las referencias funcionaron correctamente como se esperaba. Luego eliminé el proyecto C de la solución, simplemente moví el proyecto C a una ruta profunda, al igual que el proyecto B, y agregué el proyecto C a la solución y traté de compilar. Entonces no tenía visibilidad para proyectar objetos C por más tiempo.

0

Me encontré con un problema similar de espacio de nombres/método no encontrado durante la ejecución aunque estuvo bien durante la compilación, y el motivo parece ser que el ensamblado al que hacía referencia se desplegó en GAC y luego se modificó, por lo que Hice referencia al ensamblado en Visual Studion que estaba utilizando el más reciente, pero durante el tiempo de ejecución se había utilizado la versión de fro GAC.

1

En mi caso yo había copiado un ClassLibrary, y no ha cambiado el "Nombre de ensamblado" en las propiedades del proyecto, por lo que una DLL se sobrescribe el otro ...

+0

si es su caso, simplemente cambie el "Nombre del ensamblado" en las propiedades del proyecto. –

0

he resuelto este problema haciendo clic derecho sobre la carpeta que contiene los archivos y elegir Excluir del Proyecto y luego a la derecha haciendo clic de nuevo y seleccionar Incluir En Proyecto

Cuestiones relacionadas