c# .net load runtime ikvm

c# - ¿Cómo depurar errores de tiempo de ejecución "No se pudo cargar el archivo o el ensamblaje"?



.net load (6)

Al usar ProcessMonitor (de Sysinternals Suite), puede ver qué DLL está buscando su proceso justo antes de que se lance la excepción.

Tengo un proyecto que usa una biblioteca de Java convertida usando IKVM . Agregué la DLL creada más todas las posibles DLL de IKVM como referencias a mi proyecto, pero cuando lo ejecuto, obtengo el siguiente error de tiempo de ejecución:

System.IO.FileNotFoundException: No se pudo cargar el núcleo del archivo o ensamblaje, Versión = 0.0.0.0, Culture = neutral, PublicKeyToken = null ''o una de sus dependencias. El sistema no puede encontrar el archivo especificado.

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

¿Qué más he hecho mal?


El caminante de dependencias resuelve de forma estática todos los DLL necesarios para un archivo PE nativo y marca las dependencias faltantes, mientras que Fusion Log Viewer detecta problemas de enlace de ensamblaje en el código administrado durante el tiempo de ejecución. Para el código .Net administrado que carga archivos DLL nativos de forma dinámica, estas herramientas no son suficientes.

Aquí hay una publicación de blog sobre cómo puede usar Process Monitor para depurar los problemas de "No se pudo cargar el archivo o el ensamblaje": https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi


El simple hecho de incluir el caminante de dependencias y el visor de registro de fusión no funciona bien para aplicaciones que tienen código nativo y administrado juntos o que realizan una carga dinámica de código nativo. Aquí hay una buena publicación que explica paso a paso cómo resolver errores de ensamblaje faltantes (o permisos no válidos) usando un monitor de proceso que cubra esos escenarios:

La depuración no pudo cargar el archivo o ensamblaje o uno de sus errores de dependencias con Process Monitor

La publicación también incluye una herramienta para automatizar parte de esta tarea.


Existe 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. Debe asegurarse de que su dll esté presente, así como CUALQUIER dependencia que tenga este dll . Este punto clave es generalmente donde el dolor de cabeza se activa.


Puede diagnosticarlo utilizando Fusion Log Viewer (disponible en el SDK de Microsoft). Inícielo en Administrator y active el registro en la Configuración.

Registrará todas las informaciones relacionadas con la carga de sus referencias (y todas sus referencias). Le indicará explícitamente qué referencia falta y dónde la ha buscado.

MSDN en Fusion Log Viewer


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

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