C#DllImport不一致

时间:2014-08-04 16:12:21

标签: c# unit-testing dll nunit

我正在测试我正在为ThirdParty.dll使用正确的dll接口,但在某些单元测试中使用了模拟的非托管dll。在生产代码中使用DllImport(" ThirdParty.dll")导入ThirdParty.dll。模拟dll放在与NUnit测试代码相同的目录中,命令行的工作目录设置为与Test Dll和mock 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,但我相信如果它位于同一个进程内存中,则不适用。

有没有人对我可以查看的内容或可能导致此问题的内容有任何想法?

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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