studio - no se puede agregar una referencia al proyecto c#
Pregunta de referencia del proyecto C# (6)
Tengo una solución ac y está compuesta por numerosos proyectos.
Tengo un proyecto que es mis conjuntos de base que contiene toda la información común que utilizan otros proyectos. Todos los otros proyectos tienen referencias a baseassemblies.
Agregué una referencia dll en mis conjuntos de base, sin embargo, todos los otros proyectos no pueden verla.
¿Cómo puedo hacerlo para que los otros proyectos puedan ver la DLL a la que hacen referencia los baseassemblies? No quiero tener que agregar la DLL a todos los proyectos, ya que eso anula el propósito de mi proyecto de baseassemblies.
El enfoque correcto es que sus otros ensamblajes NO necesiten una referencia a esa otra DLL. La forma correcta de hacerlo es no hacer que los ensamblajes de la base expongan ninguno de los tipos que se encuentran dentro de esa DLL. Envuelva toda la funcionalidad que necesita en los ensamblajes básicos y asegúrese de que quienquiera que consuma sus ensamblajes básicos no necesite ningún conocimiento de los ensamblajes básicos de la dll subyacente. De lo contrario, cada proyecto que haga referencia a sus ensamblajes básicos, si necesitan usar algo que está contenido en esa dll, tendrán que referenciarlo.
En resumen no puedes hacerlo. Debe agregar una referencia a la DLL que contiene el código que está tratando de usar, de lo contrario no podrá verlo.
Mi sugerencia sería crear una capa en el proyecto de ''BaseAssemblies'' a la que puede acceder desde su aplicación que esencialmente crea una arquitectura en niveles.
ejemplo
Capa de aplicación - Utiliza IDataClass
Capa de lógica de negocios - define IDataClass
Capa de acceso a datos - MyRawDataClass (implementa IDataClass)
En el ejemplo, la capa de aplicación solo necesita una referencia al BAL para poder interactuar con el DAL.
Hay casos en que su proyecto hace referencia a A, que a su vez hace referencia a B, pero cuando compila, B no siempre está en la carpeta BIN y solo se da cuenta de esto cuando el código se está ejecutando. Hay una pregunta SO relacionada AQUÍ . La gente lo resolvió de formas extrañas, pero específicamente me gustó la solución de John Hunter. Este hilo SO también analiza una solución en la que utiliza eventos de compilación para lograr los resultados deseados.
No hay referencias transitivas en .NET. Si un ensamblaje necesita hacer referencia a otro, debe hacerlo directamente, no puede "heredar" esa referencia de otra referencia.
Tenga en cuenta que un proyecto solo necesita hacer referencia a ensamblajes desde los que utiliza directamente los tipos. Si A usa B, y B usa C, pero A no usa C directamente, entonces A solo necesita hacer referencia a B directamente (el cargador manejará B que hace referencia a C).
Otros carteles son correctos: no puedes hacerlo. Esto es, IMHO, patético por parte de Visual Studio. "Hacer" manejó este pastel como hace 20 años ...
Puede hacer que sus interfaces de exportación de BaseAssemblies deban ser implementadas por su "otra" dll. Además, sus BaseAssemblies necesitan alguna funcionalidad de "fábrica de clases" para esas clases.