我正在使用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'
由此产生的问题是,每当我使用Test Explorer运行测试时,都需要重新启动VS2012才能继续开发。很明显,这不是可持续的开发过程。使用仅包含C#的dll进行测试和重建没有问题——据我所知,该问题仅出现在使用本机x64代码的DLL中。
经过进一步测试,我发现罪魁祸首是vstest.executionengine.exe。使用SysInternals中的handle命令,我发现vstest.executionengine.exe会锁定cli-dll的.dll和.pdb文件。它不会锁定仅管理的dll。
如何让Visual Studio Test Explorer在测试运行完成后释放C++/Cli dll上的锁?