none
7z y librerias en subdirectorio RRS feed

  • Pregunta

  • buenas amigos, hoy les traigo algo que no entiendo y quisiera ver quien me explica y me ayuda, estoy usando en mi proyecto el 7z que es un compresor y descompresor, resulta que el funciona y todo pero cuando lo meto con sus 2 librerias correspondientes en una carpeta del proyecto me da error, cuando escribi bien la direccion y me ejecuta el programa al empezar la accion de comprimir da error como si no leyera las dll , pero si coloco los 3 archivos, 2dll y el exe en la raiz del proyecto todo anda de maravilla, que debo hacer para colocar eso en el subdirectorio que quiero y funcione?
    miércoles, 29 de noviembre de 2017 3:15

Respuestas

  • Además de usar el AssemblyResolve, otra opción en caso de que las librerías las hayas puesto en un subdirectorio por debajo de la carpeta del ejecutable es poner en el fichero .config una entrada <dependentAssembly> que tenga un <codeBase> apuntando a la carpeta donde está cada DLL. Ojo, solo funciona por debajo de la carpeta del .exe, no vale apuntarlo a una carpeta que esté más arriba en el sistema de archivos.

    https://docs.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies

    miércoles, 29 de noviembre de 2017 12:39
    Moderador
  • hola

    que dice el mensaje de error ? porque puede que no tengas acceso a la carpeta que intentas comprimir

    podrias ver si definir un manifest, puede hacer que ejecutes como admin local y asi lograr el acceso

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 29 de noviembre de 2017 13:17
  • entendida esa parte, lo que ocurre es que no tengo ni idea de como hacerlo y los ejemplos que vi de msdn son en igles asi que mas se me complica para adaptarlo a mi proyecto te coloco el contexto

    /proyecto----------------dentro de el cree una carpeta llamada procesos donde se encuentran (7za.dll 7zxa.dll 7z.exe) (entre otros archivos que supongo no tienen que ver ), si es necesario crear una carpeta para estas librerias solamente quedria asi. /proyecto --------- /procesos --------- /7z (aqui dentro: 7za.dll 7zxa.dll 7z.exe) como seria el codigo para que me sirva con las dll ¿?

    miércoles, 29 de noviembre de 2017 15:31

Todas las respuestas

  • Buenas,

    Esto se debe a que el .EXE busca las librerias que necesita para funcionar en la carpeta donde esta el mismo, si las has cambiado de sitio, puedes definir el evento Evento AppDomain.AssemblyResolve , el cual te permite decirle donde están las dll cuando las intenta buscar en su carpeta y no las encuentra.

    Nos comentas si tienes dudas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    miércoles, 29 de noviembre de 2017 11:37
  • Además de usar el AssemblyResolve, otra opción en caso de que las librerías las hayas puesto en un subdirectorio por debajo de la carpeta del ejecutable es poner en el fichero .config una entrada <dependentAssembly> que tenga un <codeBase> apuntando a la carpeta donde está cada DLL. Ojo, solo funciona por debajo de la carpeta del .exe, no vale apuntarlo a una carpeta que esté más arriba en el sistema de archivos.

    https://docs.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies

    miércoles, 29 de noviembre de 2017 12:39
    Moderador
  • hola

    que dice el mensaje de error ? porque puede que no tengas acceso a la carpeta que intentas comprimir

    podrias ver si definir un manifest, puede hacer que ejecutes como admin local y asi lograr el acceso

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 29 de noviembre de 2017 13:17
  • entendida esa parte, lo que ocurre es que no tengo ni idea de como hacerlo y los ejemplos que vi de msdn son en igles asi que mas se me complica para adaptarlo a mi proyecto te coloco el contexto

    /proyecto----------------dentro de el cree una carpeta llamada procesos donde se encuentran (7za.dll 7zxa.dll 7z.exe) (entre otros archivos que supongo no tienen que ver ), si es necesario crear una carpeta para estas librerias solamente quedria asi. /proyecto --------- /procesos --------- /7z (aqui dentro: 7za.dll 7zxa.dll 7z.exe) como seria el codigo para que me sirva con las dll ¿?

    miércoles, 29 de noviembre de 2017 15:31
  • RESUELTO!!

    la solucion era simple, en el proyecto original del 7z cree la carpeta llamada Proceso y meti las dll y el exe 7z lo corri y resulto bien , luego lo lleve a mi proyecto base y asumire que quedo con la misma direccion de la carpeta donde se abrio y resulto de maravillas , gracias de todos modos por las respuestas dadas.

    miércoles, 29 de noviembre de 2017 23:43
  • Hola Como activar opciones en asp.net

    Para que la solución brindada pueda ser útil para el resto de la comunidad y de los colaboradores favor de marcarla.

    Saludos Cordiales

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 30 de noviembre de 2017 18:50
    Moderador