Tengo un programa de aplicación C#, llamémoslo App.exe. Hace referencia a una DLL llamada A.dll que a su vez hace referencia a otra DLL, concretamente, B.dll. Sin embargo, la forma en que se les hace referencia es un poco diferente. En el código de A.dll, ha hecho referencia directa a B.dll (yendo a Proyecto> Referencias> Agregar B.dll). Sin embargo, mi App.exe tiene código para cargar A.dll en tiempo de ejecución usando Assembly.Load() etc.Referencia a una DLL desde otra DLL
Recapitulando, App.exe ---- (carga en tiempo de ejecución) ---> A.dll - - (referencia directa) ---> B.dll
Las tres cosas (App.exe, A.dll y B.dll) residen en el mismo directorio, digamos ExeDir. Ahora lo que quiero hacer es colocar a A.dll y B.dll en un subdirectorio de ExeDir. Puedo hacer esto usando un archivo App.config que especifique la ruta de A.dll y solicite a App.exe que cargue A.dll desde esa ruta. Hasta aquí todo bien.
Sin embargo, el problema es que cuando hago esto, .NET me da un error al decir que no puede encontrar B.dll que está en el mismo directorio que A.dll. Si lo vuelvo a mover al directorio original (el mismo directorio que App.exe), entonces funciona bien. Lo que significa que puedo poner a A.dll en un subdirectorio, pero el B.dll necesita estar en el directorio original.
¿Hay alguna manera en que pueda mantener ambas DLL en el subdirectorio?
Gracias por la respuesta D Stanley. Pero estoy un poco perdido aquí. ¿Puedes decirme qué se supone que debo hacer exactamente aquí? Solo para especificar este elemento con la ruta de ensamblaje? – Sach
Sí, en relación con su EXE. Por ejemplo, en el ejemplo de MSDN, el archivador buscará en la carpeta 'BIN' de forma predeterminada, pero también buscará en la carpeta' bin2', en la carpeta 'bin2 \ subbin' y en la carpeta' bin3'. Reemplace 'bin; bin2 \ subbin; bin3' con la carpeta (relativa al EXE) en la que se encuentran A.dll y B.dll. Tenga en cuenta que ya no tiene que especificar la ruta a A.dll si está incluida en el sendero de sondeo –
Gracias Stanley, ¡lo tengo para trabajar! Fue mi culpa, sin embargo, que no explique mi problema completo aquí. La razón por la que quería las DLL en carpetas separadas es que podría tener varios archivos A.dll diferentes (contenido diferente), y cada uno de ellos puede hacer referencia a B.dll. Así que quería implementar un código más seguro, de modo que si A.dll diferente quisiera referirse a B.dll, también pudiera variar dentro. Pero parece que no se puede hacer. Aún así, gracias!Usted respondió mi pregunta original. – Sach