将链接依赖项添加到 zlibwapi.lib 会导致我的所有单元测试失败,并显示消息“无法设置执行上下文以运行测试”。不幸的是,该消息没有提供足够的详细信息来解决问题。具体了解为什么无法设置测试执行上下文将非常有用,例如,由于 some_reason 无法加载 some.dll。
其他帖子已经指出所有依赖库必须在同一目录中,但这并不能解决我的问题。dumpbin.exe 工具清楚地表明,向 zlibwapi.lib 添加链接依赖项只会将 zlibwapi.dll 添加到导入部分。此外,zlibwapi.dll 的导入部分仅包含单元测试库的导入部分中已经存在的 KERNEL32.dll 和 MSVCR110D.dll。所有非标准依赖库都在单元测试运行时文件夹中,它仍然失败。
通过下载 zlib、在 Visual Studio 2012 SP3 中构建它并添加本机单元测试,可以重现该问题。具体来说:
从http://www.zlib.net下载 zlib128.zip 。
按照这些提示 ( http://bugbeebox.com/2012/12/29/building-static-zlib-v1-2-7-with-msvc-2012/ ) 在 Visual Studio 2012 上构建。
将名为 zlibunittest 的本机单元测试项目添加到 ...\zlib-1.2.8\contrib\vstudio\vc11。在 Build\Configuration Manager 中,为新项目添加一个 x64 位平台,确认它的 Build 复选框已选中,并为活动解决方案平台选择 x64。将项目依赖项从 zlibunittest 添加到 zlibvc 以确保正确的构建顺序也很有用。
修改 unittest1.cpp 的 TestMethod1 显示为:
TEST_METHOD(TestMethod1) { Assert::AreEqual(0, 0); }
将测试 --> 测试设置 --> 默认处理器架构设置为 x64 并验证它在测试资源管理器中正确运行。
修改 zlibunittest 配置属性如下:
a) 添加..\..\..\..\;到 C/C++ --> General --> Additional Include Directories 所以可以找到 zlib.h。b) 添加 $(OutDir); 到链接器 --> 常规 --> 附加库目录,以便可以找到 zlibwapi.*。c) 添加zlibwapi.lib;链接器->输入->附加依赖项。d) 将副本 ..\x64\ZlibDllDebug\zlibwapi.* $(OutDir) 添加到 Build Events --> Pre-Build Event,以便 zlib 运行时库与单元测试库二进制文件位于同一目录中。
修改 unittest1.cpp 的 TestMethod1 显示为:
TEST_METHOD(TestMethod1) { Assert::AreEqual(0, 0); gzopen(NULL, NULL); }
gzopen 的 NULL 参数与此错误无关,因为它永远不会那么远。
在测试资源管理器中运行单元测试并获得一般错误“无法设置执行上下文以运行测试”。
现在,注释掉 TestMethod1 中的 gzopen 调用,并从附加的链接器依赖项中删除 zlibwapi.lib 并观察错误消失。
有谁知道如何使 ZLib 与 Visual Studio 2012 本机单元测试一起工作?
至少,有谁知道如何获取有关此特定错误的更多详细信息,即某处的单元测试运行时日志?