2010-01-14 15 views
22

Im Konstruktor eines Formulars, wenn ich meinen Code durchtrete, wird eine Methode aufgerufen, die in der gleichen Form deklariert ist. Bevor ich in die Methode eintreten kann, erhalte ich eine System.IO.FileNotFoundException mit der Meldung "Das angegebene Modul konnte nicht gefunden werden. (Ausnahme von HRESULT: 0x8007007E)". Die Member-Methode, die ich eingeben möchte, wird als unsicher deklariert, weil sie mit nicht verwaltetem C++ - Code arbeitet, aber wie ich schon sagte, kann ich niemals in die Methode einsteigen.das angegebene Modul konnte nicht gefunden werden 0x8007007E

Da es wie ein DLL-Abhängigkeitsproblem klingt, habe ich Dependency Walker ausgeführt. Dependency Walker zeigt nur Probleme mit MPR.DLL unter SHLWAPI.DLL. Die Problemmethode ist WNetRestoreConnectionA, die ich nie anrufe. Die häufig gestellten Fragen zur Abhängigkeitswebseite legen nahe, dass dies kein Problem ist. http://dependencywalker.com/faq.html. Dies ist auch keine Webanwendung oder so. Ich bin leider mit VS2005 festgefahren.

Was sind mögliche Ursachen für dieses Problem? Irgendwelche Ideen, was ich vermissen könnte oder wie ich dieses Problem beheben könnte?

Antwort

15

Der Fehler tritt auf, wenn die .Net-Laufzeitumgebung die Methode, die Sie gerade ausführen, ersetzt, weil sie keinen der von der Methode verwendeten Typen finden konnte.

Was genau macht die Methode, auf die Sie nicht zugreifen können, und welche Typen/Methoden verwendet sie?

+0

Ausgezeichnete Antwort, das scheint das Problem zu sein. Es gibt eine Klasse, die versucht, von einer verwalteten C++ - DLL zu verwenden, von der erwartet wird, dass sie sich im Freigabeordner befindet, aber nicht dort. Nebenfrage, wie komme ich, wenn ich auf Definition auf der Klasse gehe, gehe ich in dieses verrückte Verzeichnis C: \ [PROFIL] \ LOCALS ~ 1 \ Temp \ 3292 $ [DLLNAME] $ v2.0.50727 \ [CLASS_NAME] und die Signaturen des Mitglieds sind alle da. Ich würde dir +1 geben, weil das besser ist als das, was Google mir gegeben hat, aber keine Wiederholung. – insipid

+4

+1, da ich das jetzt tun kann :) – insipid

15

Führen Sie den Abhängigkeits-Walker im Profiling-Modus oder nur statische Analyse aus? Profiling-Modus ist, was Sie dafür brauchen, denke ich. Aber es gibt bessere Lösungen, glaube ich.

Sie könnten versuchen SysInternals ProcMon. Dadurch können Sie sehen, welche Datei mindestens geladen werden soll, und von dort aus können Sie möglicherweise herausfinden, um welches Problem es sich handelt.

Mein Rat wäre, es zu starten und dann die Protokollierung auszuschalten. Gehen Sie zu dem Punkt, an dem die Ausnahmebedingung auftreten wird, aktivieren Sie die Protokollierung erneut, gehen Sie im Debugger über, damit der Fehler generiert wird, und deaktivieren Sie die Protokollierung erneut. Dies wird Sie mit nur einer kleinen Menge von Protokoll verlassen, um damit umzugehen, andernfalls kann es recht unhandlich ziemlich schnell werden.

+0

Ich stieß auf das gleiche Problem beim Versuch, eine Assembly im gemischten Modus, kompiliert in debug, auf eine neu installierte Maschine zu laufen. Ich habe ProcMon erfolgreich verwendet, um herauszufinden, dass ich die DEBUG-Version der Laufzeitbibliotheken benötigte. –

+5

Ich habe über die Verwendung von ProcessMonitor blogged, um Probleme bei der Assembly im gemischten Modus zu lösen. Http://www.sivachandran.in/2013/03/troubleshooting-module-could-not-be.html, ich hoffe es hilft. – Sivachandran

Verwandte Themen