Espacio de nombres no reconocido (aunque esté allí)

145

Recibo este error:

No se pudo encontrar el tipo o el nombre del espacio de nombres 'AutoMapper' (¿le falta una directiva de uso o una referencia de ensamblaje?)

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

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 otros dos proyectos en mi solución que usan AutoMapper y hacen referencia al mismo archivo AutoMapper.dll. Ambos funcionan perfectamente bien.

Aquí hay una captura de pantalla de uno:

ProjectThatWorks

y aquí está ese 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 en la página de propiedades.

¿Qué me estoy perdiendo?

Lo intenté:

  1. Reiniciar Visual Studio
  2. Hacer referencia sin una declaración de uso (es decir AutoMapper.Mapper.CreateMap)
  3. Limpiar y reconstruir

¿Alguna otra idea?

Vaccano
fuente
1
¿La ruta de referencia es incorrecta? Tal vez se agregó con una ruta absoluta, pero la DLL se ha movido desde entonces.
kevingessner

Respuestas:

259

Verifique para asegurarse de que su proyecto no esté configurado para usar .NET Framework 4 Client Profile.

Puede verificar / cambiar esto haciendo clic derecho en su proyecto (no en la solución), seleccione Propiedades -> Aplicación -> Marco de destino . El marco de destino 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 ensamblajes que están excluidos del .NET Framework 4 Client Profile. Dado que su proyecto está utilizando esa versión del marco, se rompe.

Un error similar se propagará al proceso de compilación cuando la versión de .NET Framework para el proyecto al que hace referencia sea más alta que el proyecto que hace la referencia. es decir, un objetivo de proyecto 4.5 que hace referencia a un objetivo de proyecto 4.5.1 le dará este mismo error.

Es necesario que haya un mejor mensaje de error cuando esto sucede porque no hay una explicación racional de por qué no se generaría, ya que el mensaje de error le indica que haga referencia a un ensamblaje al que ha hecho referencia claramente.

Andrew Hare
fuente
77
¡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 marco completo .net ¿verdad? (¿O MS simplemente pone el marco del cliente en Windows Update?) De todos modos, todas las computadoras para las que desarrollo tendrán el marco completo. Desearía que hubiera una manera de cambiar el valor predeterminado para un nuevo proyecto, por lo que me muerde como lo hizo. De todas formas. ¡Gracias de nuevo! Estaba atrapado y no pensé en mirar allí.
Vaccano
¡Tuve 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 compilarlo. Parece ser un problema en Visual Studio 2010. Gracias y saludos desde Budapest.
Varga Tamas
Buena, esto también me pasó a mí. Mi proyecto de prueba no reconocía espacios de nombres referenciados a pesar de que estaban allí. Esto se debió a que cambié mi biblioteca a la plataforma .NET 4.5 pero el proyecto de prueba se mantuvo como 4.0. En cualquier caso, su respuesta me lleva por el buen camino. Gracias por resolver esto.
Jukka Puranen
Enfrenté el mismo problema cuando intenté usar el ensamblaje .Net 2.0 en el proyecto de perfil de cliente .Net 3.5. y cambiar a 3.5 perfil completo resuelve el problema.
Palani
Mi problema fue similar. Los proyectos estaban utilizando diferentes versiones de Framework. El proyecto principal estaba usando 4.5 y el proyecto recién creado estaba usando 4.5.1. Sería bueno si el mensaje de error fuera mejor.
L_7337
27

Déjame hacerte una pregunta estúpida: ¿podría haber dos archivos automapper.dll ? ¿Uno con un AutoMapperespacio de nombres y otro sin? Confirme las rutas en ambos proyectos.

También noté que el orden de los usingcomandos es diferente. No debería importar, pero ¿has tratado de barajarlos?

n8wrl
fuente
18

Si su clase no se compila, incluso si está en el proyecto, verifique estos:

  1. si el nombre de la clase es exactamente el mismo
  2. si el espacio de nombres es exactamente el mismo
  3. si las propiedades de la clase muestran acción de compilación = compilar
Anónimo
fuente
66
Copié un archivo .cs con Explorer y luego lo incluí en el proyecto. VS.Net estableció la acción de compilación como "Contenido" en lugar de "Compilar" y, por lo tanto, no reconoció el espacio de nombres. ¡Buena atrapada!
AUSteve
1
Agregué la clase a través de la función Agregar -> Clase, y configuró la acción de compilación al contenido. ¿Solo 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 mirar allí, y busqué en Google.
Anomalía
14

Esta tiene que ser la solución más simple si todas las otras respuestas no lo ayudan.

Estaba buscando lo que estaba mal con mi configuración entre las respuestas, las probé todas, ninguna funcionó, luego me di cuenta de que Visual Studio 2018 fue desarrollado por Microsoft . Entonces hice lo que la mayoría de la gente hace,

Reinició Visual Studio y funcionó

insomne
fuente
Me funcionó, pero eliminé la carpeta bin y obj antes de reiniciar.
Chandan YS
En todos mis años en stackoverflow, esta es la mejor respuesta salada a un error (que en realidad proporciona una solución) y funcionó en el primer reinicio. insomniac ftw!
Collin White
12

Resolví este problema haciendo clic derecho en la carpeta que contiene los archivos y seleccionando Excluir del proyecto y luego haciendo clic derecho nuevamente y seleccionando Incluir en el proyecto (primero debe habilitar Mostrar todos los archivos para que la carpeta excluida sea visible)

usuario3251328
fuente
Tuve este error para toneladas de archivos, solo eliminando uno y volviéndolo a incluir resolvió el problema para toda la solución.
Daryl
¿Hacer clic derecho sobre qué? "Excluir del proyecto" elimina la carpeta del explorador de soluciones. No hay "Incluir en el proyecto"
Florian Winter
2
@FlorianWinter Para hacer clic con el botón derecho en la carpeta excluida, debe tener activada la opción Mostrar todos los archivos . Esto se puede activar a través del Explorador de soluciones, se encuentra junto al botón Contraer todo .
user3251328
No sé por qué, pero esto funcionó en VS2019 cuando agregué un nuevo archivo que contiene una nueva clase a un proyecto, pero no pude crear una nueva instancia de esa clase en otro proyecto que ya tenía una referencia al proyecto que contiene la nueva clase. ..¯\_(ツ)_/¯
matt.fc
7

Tengo un problema similar con las referencias que no se reconocen en VS2010 y las respuestas en este documento no pudieron 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 salió bien.

onurb84
fuente
2
Esto también fue un problema para nosotros y fue la longitud del camino lo que causó el problema. VS necesita hacer un mejor trabajo al dar un mejor error en ese caso ya que el error que obtuvimos fue bastante engañoso.
VoodooChild
Gracias a su respuesta, se me ocurrió una idea. Miré la ruta de mi proyecto y me di cuenta de que la carpeta raíz, la creada por el árbol de origen, tenía "% 20" en lugar de _ en el nombre. Lo cambié a _ y todo funciona bien ahora.
Fernando Wolff
5

En mi caso, el dll referenciado se compiló en una 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 'referencia faltante'. Actualizo el dll, el error desaparecerá pero nunca se generará. Esta publicación me hizo verificar la versión del marco y, por lo tanto, pude resolverla construyendo el proyecto referenciado en la misma versión.

Ankur-m
fuente
3

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

Me encontré con esto mientras usaba VS 2005, aunque uno esperaría que MS ya haya solucionado ese problema en particular ...

Dave
fuente
¿podrías solucionar este problema?
Fran_gg7
3

La pregunta ya se ha otorgado, pero hay detalles adicionales aún no descritos que deben verificarse.

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 investigar un poco, descubrí que mi camino era demasiado largo. 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 camino 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, igual que el proyecto B, y agregué el proyecto C nuevamente a la solución, e intenté compilar. Entonces ya no tenía visibilidad para proyectar objetos C por más tiempo.

barrypicker
fuente
2

En mi caso, había copiado una biblioteca de clases y no había cambiado el "Nombre de ensamblado" en las propiedades del proyecto, por lo que una DLL sobrescribía la otra ...

Fernando Meneses Gomes
fuente
2

Esto me sucedió en Visual Studio 2019. Para mí, estaba tratando de hacer referencia a otro proyecto en mi solución. Estos son los pasos que tomé en caso de que ayude a alguien más:

  1. Me aseguré de que el proyecto al que quería hacer referencia se enumerara en Referencias
  2. Aseguró que ambos proyectos estaban usando la versión correcta de .NET Framework
  3. Construyó el proyecto (hizo clic en la flecha verde "Inicio")

Estaba confundido porque seguía recibiendo el error después de los pasos 1 y 2, pero la construcción del proyecto parecía resolverlo.

mtfalcon31
fuente
1

Enfrenté un problema similar de espacio de nombres / método que no se encontró durante la ejecución, aunque estuvo bien durante la compilación, y la razón de esto parece ser que el ensamblado al que hacía referencia se implementó en GAC y desde entonces se modificó, por lo que cuando hice referencia al ensamblaje en Visual Studion estaba usando el más reciente, pero durante el tiempo de ejecución se había usado la versión para GAC.

Pavel Tsybulivskyi
fuente
1

En mi caso, recibí el error solo en VS 2015. Al abrir el proyecto en VS 2017, el error desapareció.

daniel
fuente
1

Loco. Lo sé.

Intenté todas las opciones aquí. Reiniciar, limpiar, verificar manualmente las DLL generadas (esto es invaluable para comprender si realmente fue usted el que cometió el error).

Lo hice funcionar estableciendo la Verbosidad de MSBuild en "Detallado" en Opciones.

Program.X
fuente
para mí era una configuración de compilación establecida en AnyCpu en PlatformTarget cuando el Nombre de configuración era x86. Esta configuración me ayudó a descubrirlo.
Dbl
1

Esta pregunta ya ha sido respondida para el póster original, pero en caso de que alguien se encuentre con esto en un proyecto de MS-Test:

desde Visual Studio, haga clic en el menú Prueba -> Configuración de prueba -> Arquitectura de procesador predeterminada y asegúrese de que la arquitectura coincida con la del otro conjunto al que hace referencia. Si el otro conjunto es x64 y su configuración de prueba es x86, puede experimentar los síntomas que tenía el póster original.

S. Hooley
fuente
0

Estaba trabajando en el proyecto Xamarin y, como siempre, eliminar la carpeta obj y reconstruir resolvió mi problema, el espacio de nombres que mi VS no reconocía era un código en mi propio proyecto BTW

mohas
fuente
0

En mi caso, eliminar / agregar ese ensamblaje funcionó.

jeque sabeer
fuente
0

Tuve un problema similar, que tardó un poco en solucionarlo, así que pensé en compartirlo:

El espacio de nombres que no se pudo resolver en mi caso fue Company.Project.Common.Models.EF . Había agregado un archivo en un nuevo espacio de nombres Company.Project.BusinessLogic.Common .

La mayoría de los archivos tenían un

using Company.Project;

Y luego haciendo referencia a los modelos como Common.Models.EF . Todos los archivos que también tenían un

using Company.Project.BusinessLogic;

Fallaban ya que VS no podía determinar qué espacio de nombres usar.

La solución ha sido cambiar el segundo espacio de nombres a Company.Project.BusinessLogic.CommonServices

MaPi
fuente
-1

Reiniciar Visual Studio 2019, eso fue todo.

Jeff Woehler
fuente
Vaccano escribió: Intenté: reiniciar Visual Studio
Woworks