Bueno, nunca lo he hecho en Windows, pero lo he hecho en muchos de los entornos compile-link-rtl que sirvieron como los progenitores prácticos para ello. Lo que debe hacer primero es crear "objetivos" sin las referencias cruzadas, luego vincular, luego agregar las referencias circulares, luego volver a vincular. En general, los vinculadores no se preocupan por los ref circulares ni por las cadenas de ref, solo se preocupan por poder resolver cada referencia por sí mismos.
Así que si usted tiene dos bibliotecas, A y B que tienen que hacer referencia a unos de otros, intentar algo como esto:
- Enlace A, sin ninguna referencias a B.
- Enlace B con referencias a A.
- Enlace A, agregando los refs a B.
dykam hace un buen punto, es compilar, no vincular en .Net, pero el principio sigue siendo el mismo: Haga sus fuentes de referencias cruzadas, con sus puntos de entrada exportados, pero con todos menos uno de ellos teniendo sus propias referencias a los otros aplastados. Constrúyalos así. Luego, quita las referencias externas y reconstruyelas. Esto debería funcionar incluso sin herramientas especiales, de hecho, este enfoque ha funcionado en todos los sistemas operativos en los que lo haya probado alguna vez (alrededor de 6 de ellos). Aunque obviamente algo que lo automatiza sería una gran ayuda.
Muy buena pregunta. Nunca me he tomado el tiempo para inspeccionar esto, pero tengo curiosidad por saber la respuesta. De hecho, parece que Dykam ha proporcionado una sensata. – Noldorin
¿por qué esos dll no se fusionan en uno, si todos se requieren el uno al otro? ¿Hay alguna razón práctica para eso? –
Pregunta interesante ... ¡Me gustaría saber la respuesta de Eric Lippert a esta pregunta! Y como dijo Andreas, me pregunto por qué no pusieron todo en la misma asamblea ... –