NUnit:无法加载文件或程序集' some.dll'或其中一个依赖项。指定的模块无法找到

时间:2016-06-09 15:12:40

标签: c# c++ nunit command-line-interface badimageformatexception

我有一个C ++ / CLI DLL,它使用一些C ++ DLL(都是为32位构建的)。我想通过使用NUNit 2.5.8.10295在C#DLL中测试它(更改为2.6.4没有改变结果)

我使用批处理文件,最终扩展到这个:

nunit-console-x86.exe "someUnitTests.dll" /framework=4.0.30319 /xml=NUnitResult_someUnitTests.xml

使用此命令在我的开发PC(64位Win 10 Enterprise Visual Studio 2013)上运行正常。从Visual Studio Professional 2013启动nunit-console-x86.exe并将工作目录设置为两个DLL的输出文件夹时,它也可以正常工作。

在构建服务器(在Windows Server 2012 R2上运行的Jenkins)上执行时,测试失败并显示以下消息:

SetUp : System.IO.FileLoadException : Could not load file or assembly 'some.DLL' or one of its dependencies. A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A)

我尝试比较两台计算机上安装的框架和运行时(除了使用VS 2013 Express的buildserver之外,没有看到明显的重大差异)。我还尝试了SysInternals ProcessMonitor,但没有成功。依赖性walker的输出我不明白。

有关使用技术或工具的任何提示吗?

更新: 如果我添加/ noshadow它也不再在我的开发PC上运行。在Visual Studio中,然后nunit-console-x86崩溃,而在命令行上,我得到与buildserver相同的消息。如果使用或不使用/ noshadow

运行它并没有什么区别

在没有任何Visual Studio但使用vc_redist 2013的情况下,在Windows 7的测试PC上仔细观察:启用了阴影复制(=没有/ noshadow)我得到了这个:

SetUp : System.IO.FileNotFoundException : Could not load file or assembly 'some.DLL' or one of its dependencies. The specified module could not be found.

使用/ noshadow,错误变为BadImageFormatException

2 个答案:

答案 0 :(得分:1)

默认情况下,NUnit 2.x卷影复制文件,但卷影复制不会复制本机程序集。我相信它正在Visual Studio中工作,因为您正在设置工作目录。

要在NUnit中禁用卷影复制,请传递/noshadow命令行选项。

另外,NUnit 3中的默认行为是不进行卷影复制。

答案 1 :(得分:0)

最后,我设法通过创建一个没有NUNit的控制台应用程序来减少复杂性,遇到类似的问题并修复它。有关详细信息,请参阅x86 console application doesn't run on 64bit machines except in debugger