繁体   English   中英

C#DllImport不一致

[英]C# DllImport Inconsistency

我正在测试是否为ThirdParty.dll使用正确的dll接口,但在某些单元测试中使用了模拟的非托管dll。 使用生产代码中的DllImport(“ ThirdParty.dll”)导入ThirdParty.dll。 模拟dll与NUnit测试代码放置在同一目录中,命令行的工作目录设置为与Test 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的真实安装版本。在我们的开发机器上,但是在单元测试期间被模拟之一阻止。

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

是否有人对我可以检查的内容或可能引起此问题的任何想法?

谢谢

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

使用融合日志查看器可以更详细地了解如何找到您的程序集。 查看器将列出您的应用程序正在搜索以加载程序集的所有路径以及找到它们的位置。 当我遇到意外的DLL依赖问题时,这总是给我一个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM