2010-01-14 31 views
22

Dentro del constructor de un Formulario cuando paso por mi código, se invoca un método declarado en la misma forma. Antes de poder entrar en el método, obtengo una System.IO.FileNotFoundException con el mensaje "No se pudo encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)". El método miembro que trato de ingresar se declara inseguro porque trata con código C++ no administrado, pero como he dicho, nunca puedo entrar en el método de todos modos.no se pudo encontrar el módulo especificado 0x8007007E

Dado que suena como un problema de dependencia de DLL, ejecuté Dependency Walker. Dependency walker solo muestra problemas con MPR.DLL en SHLWAPI.DLL. El método del problema es WNetRestoreConnectionA que nunca llamo. Las preguntas frecuentes sobre el agente de dependencia sugieren que esto no es un problema http://dependencywalker.com/faq.html. Además, esta no es una aplicación web ni nada. Desafortunadamente estoy atrapado con VS2005.

¿Cuáles son algunas de las posibles razones para que ocurra este problema? ¿Alguna idea sobre lo que podría extrañar o cómo podría solucionar este problema?

Respuesta

15

El error se produce cuando el tiempo de ejecución .Net JITS el método que está a punto de entrar, porque no pudo encontrar uno de los tipos utilizados por el método.

¿En qué exactamente funciona el método que no puede hacer, y qué tipos/métodos utiliza?

+0

Excelente respuesta, este parece ser el problema. Hay una clase que trata de usar desde un C++ dll administrado que espera estar en la carpeta de lanzamiento pero no está allí. Pregunta lateral, ¿cómo es que cuando hago clic en ir a la definición en la clase voy a este directorio loco C: \ [PERFIL] \ LOCALS ~ 1 \ Temp \ 3292 $ [DLLNAME] $ v2.0.50727 \ [CLASS_NAME] y las firmas miembro están todos allí. Te haría +1 porque es mejor que lo que google me dio, pero no hay representante. – insipid

+4

+1 porque puedo hacerlo ahora :) – insipid

15

¿Está ejecutando el andador de dependencias en el modo de creación de perfiles, o simplemente análisis estático? El modo de perfil es lo que necesita para esto, creo. Pero hay mejores soluciones, creo.

Puede probar SysInternals ProcMon. Esto le permitirá ver al menos qué archivo está intentando cargar y, a partir de ahí, podrá descubrir cuál es el problema.

Mi consejo sería encenderlo, luego desactivar el registro. Llegue al punto donde la excepción está a punto de suceder, vuelva a habilitar el registro, haga un paso atrás en el depurador para que se genere el error, luego deshabilite el registro de nuevo. Esto lo dejará con solo una pequeña cantidad de registro para tratar, de lo contrario, puede volverse muy difícil de manejar bastante rápido.

+0

Me encontré con el mismo problema al intentar ejecutar un ensamblado de modo mixto, compilado en la depuración, en una máquina recién instalada. Utilicé ProcMon con éxito para descubrir que necesitaba la versión DEBUG de las bibliotecas de tiempo de ejecución. –

+5

He escrito sobre el uso de ProcessMonitor para resolver problemas de dependencia del ensamblado en modo mixto aquí http://www.sivachandran.in/2013/03/troubleshooting-module-could-not-be.html, espero que ayude. – Sivachandran

Cuestiones relacionadas