我正在研究一个由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单元测试资源管理器运行我的测试。
答案 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"