Visual Studio 2008将dll锁定在bin文件夹中,并且不会放弃它

时间:2009-07-21 21:27:45

标签: visual-studio msbuild

我正在研究一个由8个.NET项目组成的解决方案。由于我正在练习TDD,我必须经常重新编译我的解决方案。最近我在尝试编译时每隔一段时间就收到以下错误:

  

错误2无法复制文件   “obj \ Debug \ Zeiterfassung.Tests.dll”来   “斌\调试\ Zeiterfassung.Tests.dll”。   该进程无法访问该文件   '本\调试\ Zeiterfassung.Tests.dll'   因为它被另一个人使用   处理。

Zeiterfassung.Tests.dll是我的一个项目生成的dll(它是单元测试项目)。这个dll总是无法复制并导致错误。其他一切在100%的时间都能正常工作。

大约9/10次我可以通过重新编译我的解决方案来“解决”问题。但是当问题变得非常糟糕时,无论我多久都尝试一次,我必须重新启动IDE,项目才会成功编译。

我使用microsoft的handle.exe来确定哪个进程正在锁定DLL并且它是devenv.exe。我也尝试手动删除DLL,直到我重新启动IDE才真正删除它。

最后但并非最不重要的是,我尝试按照另一个论坛的建议将<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>添加到我的项目中,但这没有用。

请帮忙!这个问题真的开始让我疯狂。

编辑:我还可以补充说,我确保在发生此问题时我的单元测试已完成。仍然,DLL仍然锁定。我正在通过Resharper单元测试资源管理器运行我的测试。

7 个答案:

答案 0 :(得分:4)

我之前遇到过同样的问题。 Process Explorer可以删除句柄。

答案 1 :(得分:1)

最可能的问题是线程问题。您可能有一个仍在执行的巡回线程,并且它具有对.DLL的引用。

答案 2 :(得分:1)

这对我有用: 1)在Project之外创建新文件夹(c:\ Debug); 2)右键单击您的项目,然后选择属性; 3)找到Build选项卡; 4)导航到Build选项卡中的Output部分(VS2010中的最后一个); 5)单击“浏览”按钮,选择新的c:\ Debug位置作为输出目录; 6)保存所有更改; 7)建立(F6);

答案 3 :(得分:0)

从第1天开始,Visual Studio就遇到过这样或者另一个问题。给你一套总是有效的简单解决方案会很好,但坦率地说,有时候,它只是“绊倒了”。 / p>

在这种情况下,简单的解决方案是退出并重新启动。即使关闭解决方案并重新开放也可能无济于事。

答案 4 :(得分:0)

通过“我尝试按照另一个论坛中的建议将true添加到我的项目中”是否意味着您创建了一个名为 GenerateResourceNeverLockTypeAssemblies 的属性并将其设置为 true 正如http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/6f76db9a-ea37-42b3-a016-571912c28032所建议的那样?如果没有试试。

Sayed Ibrahim Hashimi

我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

答案 5 :(得分:0)

在我移动我的测试项目后,看起来这个bug消失了(手指交叉......),从存储库中检出了项目的早期版本,并用新版本替换了所有代码文件。

答案 6 :(得分:0)

我有similar problem。我不知道一个很好的解决方案,但解决问题的黑客是添加一个杀死vstest.executionengine.exe的预构建事件:

taskkill /F /IM vstest.executionengine.exe /FI "MEMUSAGE gt 1"
taskkill /F /IM vstest.executionengine.x86.exe /FI "MEMUSAGE gt 1"