在执行流期间检索托管和非托管dll

本文关键字:dll 检索 执行流 | 更新日期: 2023-09-27 18:16:08

我有一个第三方托管的dll,调用另一个非托管的。c#代码调用它在我的机器上运行良好的调试,而不是在我把它放在服务器上。

似乎这是由于服务器上安装的版本与我的机器不同。但是想知道dll检索流(托管/非托管)是如何工作的。

到目前为止我能理解的是:

托管dll

  1. 首先在。/(很可能是bin)文件夹中查找
  2. 如果没有找到,检查GAC(何时在那里安装了dll ?)

非托管dll

  1. 可以在托管dll中使用绝对路径调用,在这种情况下应该安装在那里。
  2. 如果没有,回退将是注册表路径,在这种情况下将从那里拾取。

以上内容正确吗?

谢谢

在执行流期间检索托管和非托管dll

非托管DLL查找顺序遵循以下规则:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

简而言之:

  • 应用程序加载的目录。
  • 系统目录。使用GetSystemDirectory函数获取该目录的路径。
  • 16位系统目录。没有函数可以获取该目录的路径,但是会进行搜索。
  • Windows目录。使用GetWindowsDirectory函数获取该目录的路径。
  • 当前目录。
  • 在PATH环境变量中列出的目录。注意,这并不包括由App Paths注册表项指定的每个应用程序路径。在计算DLL搜索路径时不使用App Paths键。