¿Por qué no puedo hacer referencia a la biblioteca de mi clase?

86

Tengo una solución que contiene un sitio web y una biblioteca de clases en Visual Studio 2008.

Luego tengo otro proyecto de sitio web fuera de la solución que necesita hacer referencia a la biblioteca de clases. Hago clic con el botón derecho en la carpeta Bin o Proyecto y selecciono Agregar referencia, luego selecciono mi Proyecto de biblioteca de clases, agrega las 15 o más DLL que la biblioteca de clases necesita a la carpeta bin de sitios web, pero ninguno de los archivos .cs reconoce las declaraciones de uso.

using MyLibrary.MyFolder;

Dice que no puede resolverlo, y ReSharper simplemente dice que se puede eliminar de forma segura ya que no se está utilizando.

ReSharper puede reconocer que necesita la referencia y sugiere que "haga referencia a MyLibrary y use MyFolder". No estoy seguro de por qué sugiere que agregue una referencia que ya tengo. Cuando sigo la sugerencia, aparece el error

"No se pudo hacer referencia al módulo. Probablemente, la referencia producirá dependencias circulares entre proyectos".

Intenté ir a las páginas de propiedades de los sitios web y eliminar todas las referencias y volver a agregarlas, pero me dan los mismos errores. ¿Alguna idea de por qué esto no funciona?

Brandon
fuente
Verifique la versión de .net framework en la biblioteca de clases y el proyecto en el que hace referencia
Manideep Innamuri

Respuestas:

164

Además, verifique que los proyectos de la nueva solución se ejecuten en un marco compatible con el proyecto que está tratando de incluir. Estaba tratando de incluir una referencia a un proyecto 4.0 en un proyecto 3.5.

CindyH
fuente
3
¡Prestigio! Estaba construyendo mi solución como 4.5 y la estaba vinculando a 4.0. Debido a nuestro requisito actual de 4.0, bajé la nueva solución a 4.0 y ahora mi otro proyecto no tiene problemas para construirlo. +1 por ayudarme a mantener la cordura!
David Peterson
1
Había superado tantos obstáculos anteriores con este proyecto, estaba a punto de tirar la toalla cuando me salió este error. ¡Lo salvaste, gracias!
Tony D
1
¡No esperaba que de esta manera se resolviera el problema! Cool enuf
Irfaan
1
Entonces Microsoft debería decir esto e incluir una opción para ponerlos a todos en la misma versión.
PRMan
1
¡Salvó mi día! VisualStudio ni siquiera levantaría una alerta recordándome eso :(
Reuel Ribeiro
86

Encontré cómo solucionar este problema (al menos para mí). Por qué funcionó, no estoy seguro, pero funcionó. (Intenté con un segundo sitio web que tenía el mismo problema y la siguiente solución también funcionó).

Probé la limpieza normal de los proyectos y la reconstrucción, cerré todas mis instancias de Visual Studio y las reinicié, incluso intenté reiniciar mi computadora.

Lo que realmente funcionó fue abrir el proyecto en Visual Studio, cerrar todas las pestañas abiertas y luego cerrarlo.

Antes había dejado las pestañas abiertas porque pensaba que no importaba (y casi nunca cierro las pestañas que estoy usando).

Brandon
fuente
Simplemente reiniciar VS funcionó para mí. La causa de ese problema fue una refactorización de cambio de nombre de Project / Namespace que provocó un error en R #.
mbx
Eso funcionó para mí también. Cerré todas las pestañas como dijiste y luego reinicié mi IDE y listo, ahora puedo hacer referencia a mi biblioteca de clases. Gracias.
Yuva
31

Una posibilidad es que la versión de .NET Framework de destino de la biblioteca de clases sea superior a la del proyecto.

usuario4847434
fuente
8

Tuve un problema similar, ¿todas mis referencias serán molestadas por Resharper? La solución que funcionó para mí es borrar la caché de Resharper y luego reiniciar VS

herramientas-> opciones-> resharper-> opciones-> general-> haga clic en el botón borrar cachés y reinicie VS

Rocoso
fuente
4

Tuve problemas similares en los que VS a veces se compilaba y otras no. Después de algunas búsquedas e intentos, descubrí que tenía una referencia ambigua a una clase con el mismo nombre en diferentes bibliotecas ('FileManager'). El proyecto que no se compilaría fueron mis pruebas unitarias que hacen referencia a todos los módulos de mi solución. Hacer cumplir la referencia a un módulo específico resolvió las cosas para mí.

Mi punto es: en lugar de culpar a ReSharper o VS, puede ser una buena idea verificar si realmente no hay algún tipo de referencia circular de alguna manera. La mayoría de las veces, las clases con los mismos nombres en diferentes módulos pueden causar confusión y, a menudo, es un síntoma de un mal diseño (como en mi caso).

Fedor Steeman
fuente
+1 en mi caso, dos proyectos con diferentes espacios de nombres se compilaron en un .exe con el mismo nombre (nombre de ensamblado en la pestaña Aplicación en Visual Studio); debido a un proyecto de migración, esto tiene (algo) sentido; MSBUILD desde la línea de comandos nos dio una sola pista no es tan útil que nos dejó pensando por un tiempo: The type or namespace name 'A' does not exist in the namespace 'B'. Tenga en cuenta que no aparecen advertencias para esto ...
Jonno
3

Esto suena como un problema similar con ReSharper:

http://www.jetbrains.net/devnet/thread/275827

Según un usuario en el hilo, forzar una compilación soluciona el problema (CTRL + Shift + B) después de la primera compilación.

Suena como un problema con ReSharper específicamente en su caso. ¿Ha intentado construir independientemente de las advertencias y posibles errores falsos?

KP.
fuente
Me encontré con eso antes. Y no estoy seguro de si construirlo "solucionó" el problema. Se compila, pero aún muestra las clases, usando declaraciones, clases, etc. como no reconocidas. Sin embargo, si rompo deliberadamente alguna llamada de método, Visual Studio parece reconocer el error, incluso si no me muestra la lista de parámetros. Supongo que es culpa de ReSharpers.
Brandon
3

Dado que ambos están en la misma solución, en lugar de agregar una referencia a la DLL, agregue una referencia al proyecto de la biblioteca de clases en sí (el cuadro de diálogo Agregar referencia tendrá una pestaña para esto).

Ahh, es una solución diferente. Me perdí eso. ¿Qué tal si intenta en lugar de agregar una referencia al proyecto agregando una referencia a la DLL compilada de su biblioteca de clases? El cuadro de diálogo Agregar referencia tiene una pestaña Examinar que hace esto.

Vilx-
fuente
1
Esto funcionó para mí, otras soluciones sugirieron agregar una referencia, pero por alguna razón no la encontré hasta que hice clic derecho en el proyecto principal en el explorador de soluciones.
Ralpharama
3

Después de confirmar que se estaba utilizando la misma versión de asp.net. Eliminé el proyecto. limpió la solución y volvió a agregar el proyecto. esto es lo que funcionó para mí.

David
fuente
Tuve el mismo problema y esto pareció ayudar. Bastante extraño.
inexcitus
2

Si está haciendo referencia a ensamblados para proyectos que están en la misma solución, agregue una referencia de proyecto (usando la pestaña "Proyectos") en lugar de buscar el dll en la carpeta \ bin \ Debug (o \ bin \ Release) (usando el Pestaña "Examinar"). Vea la captura de pantalla a continuación. Busque el archivo ensamblado / dll solo si se considera un ensamblado externo.

ingrese la descripción de la imagen aquí

MacGyver
fuente
2

Eliminé * .csproj.user (archivo resharper) de mi proyecto, luego, cerré todas las pestañas y lo volví a abrir. Después de eso, pude compilar mi proyecto y no hubo advertencias de reajuste.

Alex
fuente
Hice esto y conseguí que mi intelli-sense volviera a mostrar la información del ensamblaje, pero tan pronto como intenté volver a compilar, mi información de intelli-sense para ese ensamblaje se borró y la compilación falló. ¡Este es un extraño error!
David Peterson
También tuve que volver a crear mi proyecto desde cero ... creo que hice algunas o muchas desinstalaciones / instalaciones en NuGet en un proyecto relativamente nuevo.
Adam Nofsinger
Eliminar y recrear referencias funcionó para mí, la eliminación completa del archivo del proyecto podría ser excesiva.
danjuggler
2

Tuve este problema. Me tomó siglos darme cuenta. Tenía gente sobre mi hombro para ayudar. Reconstruimos, limpiamos y reiniciamos Visual Studio y esto no lo solucionó. Eliminamos y volvimos a agregar las referencias ...

Todo en vano .... ¡Hasta!

La solución a mi problema fue que mi declaración de clase estaba mal escrita.

Antes de que empieces a juzgarme con dureza, permíteme explicarte por qué no fue estúpido, y también por qué este error podría ser cometido incluso por los programadores más inteligentes.

Dado que el error estaba al principio del nombre, no aparecía en la lista de clases de intellisense cuando comencé a escribir.

p.ej

Nombre de la clase: Message.cs

Declaración:

public class Massage
{
    //code here

}

De un vistazo y en letra pequeña, Massage se ve idéntico a Message.

Al escribir M se enumeran demasiadas clases, así que escribí e, que no aparecía en la versión mal escrita, lo que daba la impresión de que el compilador no estaba recogiendo la clase.

WonderWorker
fuente
Básicamente, tuviste un error tipográfico. Eso no es realmente útil para los demás.
TylerH
0

Tuve un problema similar en VS 2010, al crear un proyecto de prueba para una aplicación MVC 2. Los síntomas fueron idénticos.

El mensaje de ReSharper fue algo engañoso. Por un momento, ignoré por completo ReSharper y lo hice de la "forma VS manual":

  1. Limpié la solución.
  2. Agregué manualmente la referencia al proyecto MVC.
  3. Agregué manualmente las directivas using.
  4. ctrl-shift-b

En esta etapa recibí un error de compilación: debería haber hecho referencia al System.Web.Mvcensamblado en mi proyecto de prueba (suspiro). Agregar esta referencia hace que el proyecto se compile. Los problemas de ReSharper persisten, pero el ejecutor de pruebas de ReSharper funciona.

Cuando reinicio VS, los errores de ReSharper también desaparecen. No estoy seguro de si es necesario reiniciar; simplemente cerrar el archivo .cs podría ser suficiente.

De ahora en adelante, cuando vea el mensaje ReSharper

No se pudo hacer referencia al módulo. Probablemente, la referencia producirá dependencias circulares entre proyectos.

Voy a leer

No se pudo hacer referencia al módulo. Probablemente, la referencia producirá dependencias circulares entre proyectos, o le faltan algunas referencias a dependencias de las dependencias de la referencia.

Marijn
fuente
0

Otra posible solución que me funcionó:

Si tiene el Ensamblado A, que hace referencia al Ensamblado B, ambos hacen referencia a un ensamblado X que no es de proyecto (externo), y el código del Ensamblado B no reconocerá que ha hecho referencia a X, entonces intente los siguientes pasos en orden:

  • Elimine la referencia a X de AMBOS A y B
  • Recrear la referencia a X en B
  • Recrear la referencia a X en A

Aparentemente, VS no reconocerá una referencia a un ensamblado externo en un proyecto que es una dependencia de otro proyecto que ya hace referencia al externo. Al configurar las referencias nuevamente desde cero, supera esto. Es muy extraño.

KeithS
fuente
Interesante pero cierto en VS2015. ¡Gracias!
Scott Nimrod
0

Enfrenté este problema y lo resolví cerrando Visual Studio, reabriendo Visual Studio, limpiando y reconstruyendo la solución. Esto funcionó para mí.

Muhammad Sohail
fuente
0

Si usa TFS, realizar una Obtener la última (recursiva) no siempre funciona. En su lugar, fuerzo obtener la última versión haciendo clic en Control de fuente => Obtener versión específica y luego haciendo clic en ambos cuadros. Esto tiende a funcionar.

ingrese la descripción de la imagen aquí

Si aún no funciona, eliminar el archivo suo (que generalmente se encuentra en el mismo lugar que la solución) obliga a Visual Studio a obtener todos los archivos de la fuente (y posteriormente reconstruir el archivo suo).

Si eso no funciona, intente cerrar todos sus archivos abiertos y cerrar Visual Studio. La próxima vez que abra Visual Studio, debería solucionarse. Hay un error de reajuste que se resuelve de esta manera.

WonderWorker
fuente
0

Recientemente me había encontrado con un problema similar. Estoy trabajando en Visual Studio 2015 con Resharper Ultimate 2016.1.2. Estaba tratando de agregar una nueva clase a mi base de código mientras intentaba hacer referencia a una clase de otro ensamblado, pero Resharper arrojaría un error para ese paquete.

Con la ayuda de un compañero de trabajo, descubrí que la clase a la que se hace referencia existía en el espacio de nombres global y no era accesible desde la nueva clase, ya que estaba oculta por otra entidad del mismo nombre que existía en el espacio de nombres actual.

Agregar una palabra clave 'global ::' antes del espacio de nombres requerido me ayudó a hacer referencia a la clase que estaba buscando. Se pueden encontrar más detalles sobre esto en la página que se enumera a continuación:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

lumena
fuente
0

Si ambos proyectos están contenidos dentro de la misma solución, será más apropiado si agrega la referencia para el proyecto que necesita, no su dll compilado.

ingrese la descripción de la imagen aquí

Manuel Roldan
fuente
-1

Desafortunadamente, lo único que funcionó para mí fue eliminar por completo y recrear el proyecto de biblioteca de clases, después de haber copiado temporalmente los archivos de clase en otro lugar. Solo entonces el proyecto web ASP.Net reconocería las usingdeclaraciones que se referían al proyecto de biblioteca de clases. Esto fue con Visual Studio 2010, no usando ReSharper.

sarcasmo
fuente
-1

Tuve un problema similar. Lo que funcionó para mí es que había agregado una biblioteca de clases incorrecta de Visual Studio . Agregué usando la función de búsqueda de Visual Studio.

Lo que tenía que hacer era Agregar nuevo proyecto> Visual C #> Biblioteca de clases . Y esta biblioteca de clases recién agregada es la correcta y ahora se puede agregar como referencia a cualquier proyecto.

Muhammad Rehan Qadri
fuente
-4

Es posible que olvide agregar una referencia a la biblioteca de clases que necesitaba importar.

Haga clic con el botón derecho en la biblioteca de clases en la que desea importar (que contiene múltiples bibliotecas de clases importadas), -> Agregar-> Referencia (Seleccione Proyectos-> Solución-> seleccione la biblioteca de clases desde la que desea importar-> Aceptar)

Kyle
fuente