这是之前在Stack Overflow和其他地方问过的问题,但我找到的建议都没有帮助我,所以我只好尝试提一个新的问题。
场景:我有一个简单的Windows Forms应用程序(C#,.NET 4.0,Visual Studio 2010)。它具有大约两个基本表单,大多数其他表单都从中继承,它使用Entity Framework(和POCO类)进行数据库访问。没什么花哨的东西,没有多线程等。
问题:一切都很好一段时间,然后突然间,当我要启动应用程序时,Visual Studio无法构建。我得到了警告"无法删除文件'...bin\Debug\[ProjectName].exe'。路径'...bin\Debug\[ProjectName].exe'的访问被拒绝。和错误"无法将文件'obj\x86\Debug\[ProjectName].exe'复制到'bin\Debug\[ProjectName].exe'。该进程无法访问文件'bin\Debug\[ProjectName].exe',因为另一个进程正在使用它。"(在重新生成时,我会同时获得警告和错误,但仅在构建时获得错误 - 我认为这不相关?)
我完全理解警告和错误消息的含义:显然,Visual Studio正在尝试覆盖exe文件,同时由于某种原因对其进行锁定。但是,这并没有帮助我找到解决问题的方法...唯一我发现有效的方法是关闭Visual Studio并重新启动它。然后构建和启动工作,直到我在某些表单中做出更改,然后我又遇到了同样的问题,不得不重新启动...相当令人沮丧!
如上所述,这似乎是一个已知的问题,因此有很多建议的解决方案。我只列出我已经尝试过的内容,以便人们知道可以跳过什么:
- 创建一个新的干净解决方案,只需从旧的解决方案中复制文件。
- 将以下内容添加到项目的预构建事件中:
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
将以下内容添加到项目属性(.csproj文件)中:
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
然而,它们中的任何一个都对我没有用,所以你可能可以看出为什么我开始有点沮丧了。我不知道还能在哪里找到答案,所以希望有人能给我一些建议!这是VS的bug吗?如果是,是否有补丁可用?还是我做错了什么,我有循环引用或类似的问题,如果是,我该如何找出?
非常感谢任何建议 :)
更新: 如下评论所述,我还使用Process Explorer进行了检查,确实是Visual Studio锁定了该文件。