27

Creé 2 proyectos ficticios en mi aplicación y los llamé BAL y DAL. Cuando los construyo, se construyen con éxito. Si agrego una referencia al BAL al proyecto DAL, se agregó muy bien. Pero al tiempo que añade la referencia al proyecto DALBAL, me sale el siguiente error:No se puede agregar la referencia al proyecto debido a un error de dependencia circular

A reference to DAL could not be added. Adding this project as a reference would cause a circular dependency.

Puede alguien ayudarme a solucionar este error?

+2

Simplemente pruebe algunas de las principales entradas en una búsqueda rápida en Google. http://en.wikipedia.org/wiki/Circular_dependency. Buena explicación en otra pregunta sobre SO en http://stackoverflow.com/questions/308915/why-are-circular-references-in-visual-studio-a-bad-practice –

Respuesta

8

Solo puede hacer referencia de una manera, de lo contrario, obtendrá el error como usted dijo. Solo haz esto: elimina la referencia de tu DAL a tu BL y crea una nueva desde tu BL a tu DAL.

+0

Me gustaría agregar las referencias para ambos como por mi código – Venkat

+6

Use una capa común que ... Más específico: Agregue una nueva capa en su proyecto llamado común y luego ponga sus objetos comerciales en esta capa. Ahora puede hacer referencia a esta capa en todas sus capas BL y DAL. – jefsmi

+0

Solo agregué solo para crear 2 proyectos nuevos pero aun así recibo el número – Venkat

2

Eso causaría una dependencia circular. Lo que quizás quiera hacer en su lugar es tener un proyecto de aplicación principal, que haga referencia al BAL, y luego a los referenes de BAL DAL. El acceso a datos no debería necesitar hacer referencia a la lógica comercial.

10

Está implícito en el concepto de "capas" que las capas superiores dependen de las inferiores, y no al revés. Si 2 "capas" son mutuamente dependientes, entonces una no es más alta que la otra, no son capas en ningún sentido significativo, por lo que se puede considerar que están en la misma capa. El mismo principio básico se aplica a los componentes o módulos arquitectónicos, tal como lo exige Studio para las dependencias de proyectos. Si usa este principio, piense en sus proyectos como módulos de diseño en lugar de p. Ej. simplemente lanzando todo en un solo proyecto: tendrás una base de código bien estructurada que te proporcionará muchos menos problemas a medida que aumente su tamaño.

+22

-1 ya que todavía no tengo ni idea, después de leer su respuesta, de cómo hacer que VS haga lo que necesito. –

+1

-1 ya que esto no respondió la pregunta del usuario o de mí, que está teniendo la misma situación. – SnapJag

+3

Hace un punto muy válido, sin embargo, no siempre es posible reescribir una base de código masiva que ha heredado y que está mal escrita. – ElGavilan

-6

Para solucionar esto, agregue la referencia navegando a la DLL de proyectos después de que se haya creado. No lo seleccione de la pestaña "Proyectos".

+5

Agregar una referencia a un archivo DLL en el directorio bin de otro proyecto suele ser muy malo, especialmente si los proyectos están en la misma solución y tienes un servidor de compilación preparar. Causará dolores de cabeza. – TrueWill

+4

Las dependencias circulares entre proyectos es una muy mala idea, y dará compilaciones no reproducibles. Cada vez que compila, hará referencia a la DLL de la compilación anterior. –

23

Esto es lo que hay que hacer:

  1. Haga clic derecho sobre el Proyecto de DAL en el explorador de soluciones y seleccione dependencias del proyecto en el menú contextual.

  2. Ahora verá una ventana que muestra las dependencias de proyecto del Proyecto DAL. Asegúrate de que BAL no esté marcado.

Ahora usted debería ser capaz de añadir su referencia ...

espero que esto ayuda a que he tratado de mantenerlo lo más simple y directo posible.

Explicación:

Su DAL no debería ser capaz de acceder a la BAL. Sus dependencias de referencia código debe ser como este:

proyecto MVC -> BAL -> DAL

El proyecto MVC debe hacer referencia a la BAL, el BAL debe hacer referencia a la DAL. Configura tu proyecto así Haga que funcione y luego comprenderá mejor por qué esta configuración es mejor.

dado:

  1. datos = números en bruto y cadenas
  2. información = datos procesados ​​en algo significativo

Cosider º e siguiente: La interfaz de usuario debe recibir su información de la BAL que podría ser capaz de componer es de datos basados ​​en el DAL.

1

Esto me pasó a mí. Tiene una dependencia circular, es decir, dos proyectos que se referencian entre sí. Necesitas hacer uno de ellos independiente del otro. Toma algo de tiempo y sucede tan rápido. Un segundo estaba felizmente codificando, y al siguiente tuve 45 errores como este. Solo tomó algo de tiempo, pero también mejora la estructura de su arquitectura/programa, lo que le ayuda a resolver las dependencias correctamente.

0

En mi caso copié un archivo de proyecto sin generar un nuevo ProjectGuid. Dado que Visual Studio identifica proyectos de forma única con el ProjectGuid, supuso que el proyecto intentaba hacer referencia a sí mismo.

0

Este problema se me ocurrió cuando yo estaba construyendo una aplicación WPF con varias capas como capa de interfaz de repositorio, capa de servicio de repositorio, capa de servicios de SQL, capa de servicios de descanso y mi capa principal WPF UI.

  • Resolvió este error. Noté que algunas de las capas estaban haciendo referencia innecesariamente a otros proyectos. Eliminé esta referencia innecesaria .
  • Luego noté que parte de mi capa de servicio y capa de repositorio tenía mi proyecto WPF UI como referencia (proyecto My StartUp); esto es que estaba creando una referencia circular. Eliminé esto

============================================ ============================

Conclusión: Compruebe la dependencia de referencia de cada proyecto y asegúrese de que no haya ninguna referencia innecesaria. Asegúrese de que las subcapas no hagan referencia al proyecto de inicio en la referencia.

Espero que haya sido útil.

Cuestiones relacionadas