Principales respuestas
7z y librerias en subdirectorio

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?
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
- Marcado como respuesta Pablo RubioModerator lunes, 4 de diciembre de 2017 15:37
-
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- Editado Leandro TuttiniMVP miércoles, 29 de noviembre de 2017 13:17
- Propuesto como respuesta Pablo RubioModerator miércoles, 29 de noviembre de 2017 15:43
- Marcado como respuesta Pablo RubioModerator lunes, 4 de diciembre de 2017 15:37
-
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 ¿?
- Marcado como respuesta Pablo RubioModerator lunes, 4 de diciembre de 2017 15:37
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:
-
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
- Marcado como respuesta Pablo RubioModerator lunes, 4 de diciembre de 2017 15:37
-
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- Editado Leandro TuttiniMVP miércoles, 29 de noviembre de 2017 13:17
- Propuesto como respuesta Pablo RubioModerator miércoles, 29 de noviembre de 2017 15:43
- Marcado como respuesta Pablo RubioModerator lunes, 4 de diciembre de 2017 15:37
-
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 ¿?
- Marcado como respuesta Pablo RubioModerator lunes, 4 de diciembre de 2017 15:37
-
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.
-
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.