views:

1278

answers:

2

Inside the constructor of a Form when I am stepping through my code, a method declared in the very same form is called. Before I can step inside the method, I get a System.IO.FileNotFoundException with message "The specified module could not be found. (Exception from HRESULT: 0x8007007E)". The member method I try to enter is declared unsafe because it deals with unmanaged C++ code, but like I said I can never step into the method anyways.

Since it sounds like a DLL dependency issue, I ran Dependency Walker. Dependency walker only shows problems with MPR.DLL under SHLWAPI.DLL. The problem method is WNetRestoreConnectionA which I never call. The dependency walker FAQ suggests that this is not a problem http://dependencywalker.com/faq.html. Also, this is not a web application or anything. I am unfortunately stuck with VS2005.

What are some possible reasons for this problem to occur? Any ideas on what I could be missing or how I could debug this problem?

+2  A: 

The error is occurring when the .Net runtime JITs the method you're about to step into, because it couldn't find one of the types used by the method.

What exactly does the method that you can't step into do, and what types / methods does it use?

SLaks
Excellent answer, this seems to be the problem. There is a class its trying to use from a managed c++ dll it that it expects to be in the release folder but its not there. Side question, how come when I click go to definition on the class I go to this crazy directory C:\[PROFILE]\LOCALS~1\Temp\3292$[DLLNAME]$v2.0.50727\[CLASS_NAME] and the member signatures are all there. I would +1 you because this is better than what google gave me, but no rep.
insipid
+1 since I can do that now :)
insipid
+4  A: 

Are you running dependency walker in profiling mode, or just static analysis? Profiling mode is what you need for this I think. But there are better solution I believe.

You could try SysInternals ProcMon. This will allow you to see what file it is trying to load at least, and from there you might be able to figure out what the problem is.

My advice would be to fire it up, then turn off logging. Get to the point where the exception is about to happen, reenable logging, step over in the debugger so the error is generated, then disable logging again. This will leave you with only a small amount of log to deal with, otherwise it can get quite unwieldly quite quickly.

Sam Holder