我将 Visual Studio 2012 用于具有 C# 和 C++/CLI .dll 的解决方案,其中 C++/CLI dll 引用本机 .dll,例如 boost。C++ 代码编译为 x64。
当我打开 VS 时,我可以清理和构建我的项目。
使用测试资源管理器,我可以运行我的测试。
一旦我使用测试资源管理器运行测试一次,我就无法重建项目。似乎 VS2012 测试资源管理器锁定了我的 C++/CLI-dll,并且出现以下错误:
LNK1104: cannot open file 'C:\Dev\LockExample\bin\Debug\cli.dll'
因此,每当我使用测试资源管理器运行测试时,我都需要重新启动 VS2012 才能继续开发。显然,这不是一个可持续发展的过程。
仅 C# 的 dll 的测试和重建工作没有问题 - 据我所知,问题只发生在使用本机 x64 代码的 DLL 上。
经过一番测试,我发现这里的反派是vstest.executionengine.exe。使用句柄(来自 SysInternals),我看到 vstest.executionengine.exe 持有 cli-dll 的 .dll 和 .pdb 的锁。它不为仅限托管的 dll 持有任何锁。
测试运行完成后,如何让 Visual Studio 测试资源管理器释放 C++/Cli dll 上的锁?