No se pudo encontrar el tipo o el nombre del espacio de nombres

Tengo una solución C# con varios proyectos en Visual Studio 2010 . Uno es un proyecto de prueba (lo llamaré ” PrjTest “), el otro es un proyecto de Windows Forms Application (lo llamaré ” PrjForm “). También hay un tercer proyecto al que hace referencia PrjForm, que puede referenciar y usar con éxito.

PrjForm hace referencia a PrjTest y PrjForm tiene una clase con una instrucción de using :

 using PrjTest; 
  1. La referencia ha sido agregada correctamente
  2. using statement está correctamente en su lugar
  3. La ortografía es correcta
  4. PrjTest construye con éxito
  5. PrjForm casi se construye, pero se rompe en el using PrjTest; línea con el error:

No se pudo encontrar el tipo o el nombre del espacio de nombres ‘PrjTest’ (¿falta una directiva using o una referencia de ensamblado?)

He intentado lo siguiente para resolver esto:

  1. Remover Resharper (dado que Resharper no tuvo problemas para reconocer el proyecto al que se hace referencia, pensé que podría valer la pena intentarlo)
  2. Se eliminó y se volvió a agregar la referencia y el uso de la statement
  3. Recreado PrjForm desde cero
  4. PrjForm actualmente reside dentro de la carpeta PrjTest, traté de moverlo a una carpeta externa
  5. Cargó la solución en una computadora diferente con una copia nueva de VS 2010

Hice mi tarea y pasé demasiado tiempo buscando una respuesta en línea; ninguna de las soluciones me ha ayudado.

¿Qué más podría probar?

Ver esta pregunta

Resulta que esto fue un problema de perfil del cliente.

PrjForm se estableció en “.Net Framework 4 Client Profile” Lo cambié a “.Net Framework 4”, y ahora tengo una comstackción exitosa.

¡Gracias a todos! Supongo que se da cuenta de que después de todo ese tiempo dedicado a buscar en línea, encuentro la solución minutos después de publicarla, supongo que el truco está en saber la pregunta correcta para preguntar.

PrjForm se estableció en “.Net Framework 4 Client Profile” Lo cambié a “.Net Framework 4”, y ahora tengo una comstackción exitosa.

Esto funcionó para mí también. Muchas gracias. Estaba probando un ejemplo de RDF para dotNet donde descargué el kit de dotnetrdf.

Perfil del cliente NET4: siempre apunte al perfil del cliente NET4 para todas sus aplicaciones de escritorio del cliente (incluidas las aplicaciones Windows Forms y WPF).

Marco completo de NET4: segmente NET4 completo solo si las características o ensamblajes que necesita su aplicación no están incluidos en el perfil del cliente. Esto incluye: si está creando aplicaciones de servidor, como:

  • Aplicaciones ASP.Net
  • Servicios web basados ​​en ASMX del lado del servidor

Si utiliza escenarios heredados de clientes, como por ejemplo: o Use System.Data.OracleClient.dll, que está en desuso en NET4 y no está incluido en el perfil del cliente.

  • Utilice Windows Workflow Foundation 3.0 o 3.5 heredado (WF3.0, WF3.5)

Si se dirige a escenarios de desarrollador y necesita herramientas como MSBuild o necesita acceder a conjuntos de diseño como System.Design.dll

En mi caso, tuve:

URL referenciada: .NET 4.5

Proyecto: .NET 4.0

Debido a la falta de coincidencia anterior, el proyecto 4.0 no pudo ver dentro del espacio de nombres del 4.5 .DLL. Recopilé el .DLL para apuntar .NET 4.0 y estaba bien.

Otra cosa que puede causar este error es tener paquetes NuGet que se han creado con una versión más nueva de .NET.

El error original:

 frmTestPlanSelector.cs(11,7): error CS0246: The type or namespace name 'DatabaseManager' could not be found (are you missing a using directive or an assembly reference?) 

Más arriba en el registro encontré esto:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3275: The primary reference "[redacted]\DatabaseManager\bin\Release\DatabaseManager.dll" could not be resolved because it has an indirect dependency on the assembly "System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

La solución fue volver a instalar los paquetes NuGet:

http://docs.nuget.org/docs/workflows/reinstalling-packages

Resolví el mío porque el otro proyecto estaba codificado con .NET 4.5 y el otro codificado 4.0

También es posible que los proyectos referenciados se dirijan a .NET 4.0, mientras que el Proyecto de la aplicación de consola se dirige a la Biblioteca del cliente .NET 4.0.

Si bien podría no estar relacionado con este caso en particular, creo que otra persona puede encontrar útil esta información.

Me encontré con este problema que resultó ser.

El Proyecto B hace referencia al Proyecto A.

Proyecto A comstackdo como A.dll (nombre del ensamblado = A).

Proyecto B comstackdo como A.dll (nombre de conjunto A).

Visual Studio 2010 no estaba captando esto. Resharper estaba bien, pero no comstackría. El diseñador de WinForms dio un mensaje de error engañoso que probablemente sea el resultado de objectives incompatibles de la plataforma.

La solución, después de un día doloroso, fue asegurarse de que las asambleas no tengan el mismo nombre.

La instrucción using se refiere a un espacio de nombres , no a un proyecto .

Asegúrese de tener el espacio de nombres apropiadamente nombrado en su proyecto referenciado:

 namespace PrjTest { public class Foo { // etc... } } 

Lea más sobre espacios de nombres en MSDN:

  • Usar espacios de nombres

Tuve el mismo problema. Los marcos de destino estaban bien para mí. Aún así no estaba funcionando. Instalé VS2010 sp1 e hice una “Reconstrucción” en PrjTest. Entonces comenzó a funcionar para mí.

El dll comstackdo debe tener clase pública.

Cambiar el marco a

 .NET Framework 4 Client Profile

hizo el trabajo por mí.

Para las referencias COM / ActiveX, VS 2012 mostrará este error al usar la instrucción. Lo cual es bastante divertido, ya que está diciendo que puede ser que te falta una statement de uso.

Para resolver esto: registre el dll COM / ActiveX real incluso si está en el proyecto vecino, y agregue una referencia a través del canal COM, no del canal del proyecto. Agregará Interop.ProjectName en lugar de ProjectName como referencia y esto resuelve este extraño error.

Si su proyecto (PrjTest) no expone ningún tipo público dentro del espacio de nombres PrjTest , causará ese error.

¿El proyecto (PrjTest) incluye clases o tipos en el espacio de nombres “PrjTest” que son públicos?

acaba de cambiar el marco de destino de la aplicación a “.NET Framework 4”.

Y el error desapareció.

buena suerte; :RE

Otro problema que podría estar causando dicho comportamiento son las configuraciones de comstackción.

Tenía dos proyectos con configuraciones configuradas para crear carpetas específicas. Como Debug y Any CPU y en segundo lugar Debug y x86 .

Lo que hice fue a Solution->Context menu->Properties->Configuration properties->Configuration y configuré todos mis proyectos para utilizar las mismas configuraciones Debug y x86 y también marqué Build marca.

Luego, los proyectos comenzaron a comstackrse correctamente y pudieron ver espacios de nombres.

revise las Propiedades del proyecto, sus rutas de referencia deben estar vacías de esta manera:

Propiedades del proyecto

Saludos