如何调试 "System.DllNotFoundException: The specified procedure could not be found"?

How do I debug "System.DllNotFoundException: The specified procedure could not be found"?

我已经为某个本机 DLL 设置了一个 PInvoke 包装器,但是每当我尝试从它调用任何东西时,它都会崩溃,显示 System.DllNotFoundException: The specified procedure could not be found

我已经检查过的内容:

至此,我已经无计可施了。我怎样才能调试它并弄清楚到底出了什么问题?我得到的错误信息是一堆关于有用性的失败信息;它甚至没有告诉我它找不到的过程的名称。

使用 gflags.exe 为您的应用程序启用 Loader snaps

这应该会在进程的调试输出上提供大量与 dll 加载/解析相关的信息,您可以跟踪这些信息以查看失败的位置。

更多信息:Debugging LoadLibrary Failures

请注意:根据您的 visual studio 设置,您的代码将 运行 ProjectName.vshost.exeProjectName.exe

我会先在本机应用程序中调试它。原因我稍后会解释。

将一个简单的控制台应用程序放在与 C# 可执行文件相同的目录中。让那个控制台应用程序在 DLL 上调用 LoadLibraryGetProcAddress 你是 p/invoking。是否出现同样的错误?

如果错误确实发生,您现在可以在配置文件模式下使用 Dependency Walker 进行调试。将控制台应用加载到 Dependency Walker 中。然后使用配置文件菜单上的操作来检测正在执行的应用程序。您应该会看到那里报告的错误,并且您会确切地知道找不到哪个函数。

据我所知,Dependency Walker 不能很好地与 .net 配合使用,因此是本机测试主机。

如果没有出现错误,则说明有更深层次的问题