1

我在 x64 上使用 MSTest 时遇到问题:测试项目依赖于几个 C++/CLI 程序集,并且由于某种原因无法加载。在 Visual Studio 中,我得到(精简):

Error loading D:\xxx\Xxx.Test.dll: Unable to load the test container 'D:\xxx\Xxx.Test.dll' or one of its dependencies. Error details: System.BadImageFormatException: Could not load file or assembly 'Common.Geometry.Native, Version=1.1.4574.22395, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

在命令提示符下手动运行 MSTest,我得到:

Unable to load the test container 'D:\xxx\Xxx.Test.dll' or one of its dependencies. Error details: System.IO.FileNotFoundException: Could not load file or assembly 'Common.Geometry.Native, Version=1.1.4574.22395, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

值得一提的细节:

  • 测试项目本身是使用“Any Cpu”编译的。
  • 我使用 x64 特定的 testrunco​​nfig
  • Dependency walker 显示 C++/CLI 程序集 (Common.Geometry.Native) 中没有丢失的本机依赖项
  • 更有趣的是,在同一解决方案中还有另一个测试项目使用相同的 C++/CLI 程序集 (Common.Geometry.Native),它运行时没有任何问题。

我还验证了没有 32 位程序集/dll 干扰。

欢迎任何建议!

4

1 回答 1

0

我最初认为微软直到 2012 年才为 MSTest 添加支持 64 位的测试运行器......事实证明,VS2010 能够做到这一点。

然后我要检查的是您的本机 dll 是否有任何其他本机依赖项。

MSTest 有一个“错误功能”,在运行测试之前,它会创建一个临时目录,通常类似于PC-NAME WORKSPACE_NAME 1782368124\Out,并将您的代码复制到该目录中。对于 .NET 程序集,它可以找出依赖关系并能够复制它们,但对于本机代码,它似乎没有这样做。

我过去通过将包含任何其他本机依赖项的目录添加到我的用户帐户的 PATH 环境变量中解决了这个问题(请记住,如果您这样做是为了重新启动 Visual Studio,因为它不会注意到)

于 2012-09-11T03:36:07.727 回答