我将 Visual Studio 2012 用于带有 C# 和 C++/CLI .dll 的解决方案,其中 C++/CLI dll 引用 native .dll,例如 boost。 C++ 代码编译为 x64。
当我打开 VS 时,我可以清理并构建我的项目。
使用测试资源管理器,我可以运行我的测试。
一旦我使用测试资源管理器运行一次测试,我就无法重建项目。似乎 VS2012 Test Explorer 锁定了我的 C++/CLI-dll,并且出现以下错误:
LNK1104: cannot open file 'C:\Dev\LockExample\bin\Debug\cli.dll'
因此,每当我使用测试资源管理器运行测试时,我都需要重新启动 VS2012,然后才能继续开发。显然这不是一个可持续的发展过程。
测试和重建对于仅 C# 的 dll 没有问题 - 据我所知,问题只发生在使用 native x64 代码的 DLL 上。
经过一番测试,我发现这里的反派是vstest.executionengine.exe。使用句柄(来自 SysInternals),我看到 vstest.executionengine.exe 持有 cli-dll 的 .dll 和 .pdb 的锁。它不会为仅限托管的 dll 持有任何锁。
如何让 Visual Studio 测试资源管理器在测试运行完成后释放对 C++/Cli dll 的锁定?
最佳答案
在 Visual Studio 2013 中,通过取消选中菜单中“测试 -> 测试设置”下的“保持测试执行引擎运行”选项,可以轻松解决此问题。
我在另一篇文章中找到了答案: vstest.executionengine.x86.exe not closing
关于c# - VS2012 测试资源管理器锁定 native .dll,导致重建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16732195/