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

NUnit: Could not load file or assembly 'some.dll' or one of its dependencies. The specified module could not be found

我有一个 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 的输出文件夹时,它也工作正常。

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

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,但没有成功。 depency walker的输出我看不懂。

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

更新: 如果我添加 /noshadow 它也不会 运行 在我的开发 PC 上了。在 Visual Studio 中,nunit-console-x86 崩溃,而在命令行上,我收到与构建服务器上相同的消息。虽然 运行 有或没有 /noshadow

都没有区别

使用 Windows 7 没有任何 Visual Studio 但使用 vc_redist 2013 仔细查看测试 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

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

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

顺便说一句,NUnit 3 中的默认行为是不进行卷影复制。

最后我设法通过创建一个没有 NUNit 的控制台应用程序来降低复杂性,运行 解决了类似的问题并修复了它。有关详细信息,请参阅