【问题标题】:Debugging Unable to load DLL 'MyDll.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)调试无法加载 DLL“MyDll.dll”:找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E)
【发布时间】:2014-07-22 15:54:16
【问题描述】:

我遇到了异常:

Unable to load DLL 'MyDll.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

正如Unable to load DLL (Module could not be found HRESULT: 0x8007007E) 的答案所暗示的,我们希望将非托管 dll 与所有托管 dll 一起保留在当前目录中(并且它就在那里)。出于调试目的,我如何打印将用于加载 dll 的当前目录?是Directory.GetCurrentDirectory()吗?

【问题讨论】:

  • DLL 文件夹搜索顺序在此处描述:stackoverflow.com/questions/268627/… 您也可以像此处描述的那样显式设置搜索目录:stackoverflow.com/questions/2864673/…
  • 当前目录不是特别相关。您没有显示任何代码或向我们提供足够的详细信息。
  • @DavidHeffernan,为什么当前目录不相关?它应该是寻找dll的第二位......
  • 如果您依赖当前目录来定位您的 DLL,那么您做错了。将非托管 DLL 与可执行文件放在同一目录中并完成。
  • 如果您需要控制 DLL 的加载位置,并且您不能将 DLL 放在可执行文件夹中,我发现使用显式调用 LoadLibrary 将完整路径传递给动态链接库。或者致电SetDllDirectoryAddDllDirectory。我个人更喜欢LoadLibrary

标签: c# .net pinvoke


【解决方案1】:

您可以使用 Environment.CurrentDirectory 获取应用程序的当前工作目录。这应该给你想要的。

Assembly.GetExecutingAssembly().Location 将返回包含当前正在执行的可执行文件或 DLL 的目录。

CurrentDirectory 可以通过 FileDialogs 和其他类进行更改。因此,它可能与包含应用程序入口点的目录不同。

【讨论】:

  • 另外,.NET 可以在 GAC(全局程序集缓存)中找到 DLL,如果 DLL 已加载到其中。
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多