c# - VS2012 测试资源管理器锁定 native .dll,导致重建失败

标签 c# visual-studio visual-studio-2012 c++-cli test-explorer

我将 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/

相关文章:

c# - 使用 C# 选择数组中的下一个 child

c# - 事件源与原始源

c# - 如何在 C# 中打印 n 次 n 而无需循环、递归或 goto

c# 为一组对象获取属性并确保所有对象的值相同

python - Visual Studio CL.exe 找不到 python.h

javascript - console.log() 在 Visual Studio 2012 中不起作用

c# - Visual Studio 2012 中的排队负载测试

c# - TPL 中断未处理的异常

vb.net - 恢复丢失的 VB.net 应用程序的方法

c# - Visual Studio 编译正常,但仍然显示红线