【问题标题】:Nunit cannot find C++ assemblyNunit 找不到 C++ 程序集
【发布时间】:2012-08-03 22:48:58
【问题描述】:

我正在开发使用 VS2005 C++/CLI 库的 .NET 4 应用程序。围绕 C++/CLI 库的测试是基于自定义控制台的测试运行器,并且有点笨拙。我一直在尝试使用 nunit 编写一些新的测试。

问题是基于控制台的应用程序可以加载所有依赖程序集,但 Nunit 抱怨它找不到程序集(例如 System.Runtime.Serialization.SerializationException : Unable to find assembly 'msvcm80, Version=8.0.50727.6195, Culture=neutral , PublicKeyToken=b03f5f7f11d50a3a')。

我已经确定基于控制台的应用程序正在 C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a\mscvm80.dll 加载程序集,并将此文件手动复制到构建目录和测试运行程序目录.这没有帮助。

Depends.exe 告诉我 GPSCV.DLL 和 IESHIMS.DLL 找不到,但这不会阻止控制台应用程序加载依赖项,因此不确定这是否重要。

有没有人有任何解决 Nunit 测试的技巧,这些测试依赖于旧的 C++/CLI 库?

【问题讨论】:

  • 我不确定这是否相关,但您的计算机上安装了 .NET 2.0 吗?另外,您能否将 C++/CLI 库重新构建为以 .NET 4 为目标?
  • 谢谢,我没有在 Windows 7 程序和功能中安装 .NET 2.0 运行时。我会安装,看看它是否有任何魔力。为 .NET 4 重新编译也很有意义(其中可能存在一些可怕的其他 .NET 2 依赖项,但在我尝试之前不会知道!)。

标签: c++-cli nunit


【解决方案1】:

当我将 nunit 可执行文件运行到构建输出路径时,我的新测试在 nunit 中成功运行。

看起来这个问题只是需要所需的 C++ DLL 位于与 nunit 运行程序相同的路径(或至少 nunit 可访问)的情况。令人困惑的是,从在另一个位置运行的 nunit 运行测试时引发的模块加载异常命名了 nunit 路径中不需要的程序集 (msvcm80.dll)。无论如何,依赖树对我来说有点不透明,这让我很困惑。

令人讨厌的是,我必须通过 Team City 中的批处理脚本调用 nunit 控制台来运行此程序集的 CI 测试,而不是在 Team City nunit 测试运行程序中(就像我们对所有其他测试所做的那样)。

【讨论】:

  • 首先,您使用的是最新的 NUnit 吗? (现在是 2.6.1)。我确实记得看过有关托管-非托管交互的错误报告。其次,您可以让 Team City 获取测试结果并显示它们,就像它为 Nunit 跑步者所做的那样。检查this question
猜你喜欢
  • 1970-01-01
  • 2014-08-23
  • 2011-03-02
  • 2021-11-07
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2023-03-20
相关资源
最近更新 更多