2011-01-05 13 views
23

Tengo un proyecto que usa una biblioteca Java convertida usando IKVM. He añadido el archivo DLL creado más todos los posibles DLL IKVM como referencias a mi proyecto, pero cuando lo ejecuto, me sale el siguiente error de ejecución:Cómo depurar errores de tiempo de ejecución de "No se pudo cargar el archivo o el ensamblado"?

System.IO.FileNotFoundException : Could not load file or assembly 'core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

No estoy realmente seguro de cómo depurar este error. ¿Hay alguna manera de saber exactamente qué tipo falta? De la descripción, supongo que esta es la DLL generada (desde la lib de Java) pero la he agregado correctamente como referencia.

¿Qué más he hecho mal?

+0

Como no estoy seguro de lo que no voy presentar una respuesta. Un .DLL faltante no lanzará una IOexception. Lo más probable es que .DLL lea algún tipo de archivo (una configuración o algo así) y falta. Probablemente deberías consultar el manual de este IKVM. –

+2

La etiqueta "assembly" es para programación en lenguaje ensamblador. Lo he borrado, espero que no te importe. – Jester

+0

Excelente idea, pero creo que olvidó agregar la etiqueta ikvm que es mejor para esta publicación;) –

Respuesta

20

Puede usar el Fusion Log Viewer para depurar problemas de carga de ensamblaje en aplicaciones .NET.

Además, Process Monitor es muy útil para identificar problemas generales de carga de archivos.

2

Hay un programa llamado Dependency Walker que le permite ver las dependencias de un archivo PE dado (dll, exe, ocx ...).

Este error es realmente molesto, muy difícil de depurar. Debes asegurarte de que tu dll está presente, así como de CUALQUIER dependencia que este dll tenga. Este punto clave es generalmente donde comienza el dolor de cabeza.

+7

Dependency walker resolverá las dependencias nativas. Esto parece un problema de dependencia administrada. –

5

Puede diagnosticar eso mediante el uso de Fusion Log Viewer (disponible en Microsoft SDK). Inicie en Administrador y active el registro en la Configuración.

Se registrará toda la información sobre la carga de referencias (y todas sus referencias). Le dirá explícitamente qué referencia falta y dónde la ha buscado.

MSDN on Fusion Log Viewer

0

Usando ProcessMonitor (desde el Sysinternals Suite), se podía ver lo que su proceso de DLL está buscando a la derecha antes de que se produce la excepción.

6

Simplemente haciendo sonar ese walker de dependencia y el visor de registro de fusión no funcionan bien para las aplicaciones que tienen códigos nativos y administrados juntos o que realizan la carga dinámica del código nativo. Aquí es un buen post explicando paso a paso cómo resolver faltante (o permiso no válido) errores de montaje usando monitor de proceso que cubre esos escenarios:

Debug Could not load file or assembly or one of its dependencies error with Process Monitor

El artículo también incluye una herramienta para automatizar algunas de esta tarea como bien

0

El cazador de dependencias resuelve estáticamente todas las DLL que necesita un archivo PE nativo y marca las dependencias que faltan, mientras que Fusion Log Viewer detecta problemas de enlace de ensamblado en el código administrado durante el tiempo de ejecución. Para el código .Net administrado que carga archivos DLL nativos dinámicamente, estas herramientas no son suficientes.

Aquí es un blog sobre cómo se puede utilizar el monitor de procesos para depurar “No se pudo cargar el archivo o ensamblado” problemas: https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi

Cuestiones relacionadas