c# DllImport不一致性

本文关键字:不一致性 DllImport | 更新日期: 2023-09-27 18:16:14

我正在测试我正在为ThirdParty.dll使用正确的dll接口,但在一些单元测试中使用模拟的非托管dll。在生产代码中使用DllImport("ThirdParty.dll")导入ThirdParty.dll。模拟dll被放置在与NUnit测试代码相同的目录中,命令行的工作目录被设置为与测试dll和模拟dll相同的目录,然后使用完整路径调用NUnit。

的例子:

TestDirectory包含:

  • Test.dll
  • nunit.framework.dll
  • pnunit.framework.dll
  • ThirdParty.dll
  • 和其他依赖项。

,下面的叫做

C:'TestDirectory>ProgFiles'NUnit'nunit-console-x86.exe Test.dll /config:Release /framework:net-4.0

在我们的开发机器上,模拟版本的ThirdParty.dll被很好地捡起,我们的测试通过了,但是当我们把相同的代码和目录结构放在客户计算机上时,它会捡起实际安装的dll版本,而不是我们在开发机器上安装的dll版本,但在单元测试期间被模拟版本阻止。

我知道Windows使用的搜索顺序,但我认为在这两种情况下,DLL应该在步骤1"从应用程序加载的目录"中找到。我也知道如果它在内存中拾取相同的名称DLL,但我相信这适用于如果它在相同的进程内存中,它不应该是。

有没有人对我可以检查什么或什么可能导致这个有任何想法?

谢谢

c# DllImport不一致性

动态链接库的搜索顺序可以在这里找到。它总是相同的,但它确实取决于操作系统设置,所以在两台不同的机器上设置不同,您可能会得到不同的结果。

使用融合日志查看器获得关于如何查找程序集的更详细视图。查看器将列出应用程序为加载程序集而搜索的所有路径以及找到它们的位置。这总是给我一个答案,当我有意想不到的DLL依赖问题。