更新: 可在Microsoft Connect上找到重现此错误的示例项目。我还测试并验证了下面接受的答案中给出的解决方案可用于该示例项目。如果此解决方案不适合您,则可能是您遇到了其他问题(属于一个单独的问题)。
这是之前在Stack Overflow和其他地方都提出过的问题,但是到目前为止,我发现的任何建议都没有帮助我,所以我只需要尝试提出一个新问题。
场景:我有一个简单的Windows窗体应用程序(C#、. NET 4.0,Visual Studio 2010)。它具有大多数其他表单都继承的几个基本表单,它使用实体框架(和POCO类)进行数据库访问。没什么花哨的,没有多线程的。
问题:暂时一切都很好。然后,当我要启动应用程序时,Visual Studio突然无法构建。我收到警告“无法删除文件'... bin \ Debug \ [ProjectName] .exe'。访问路径'... bin \ Debug \ [ProjectName] .exe'被拒绝。” 错误“无法将文件'obj \ x86 \ Debug \ [ProjectName] .exe”复制到'bin \ Debug \ [ProjectName] .exe'。该进程无法访问文件'bin \ Debug \ [ProjectName] .exe” “因为它正在被另一个进程使用。” (在运行Rebuild时,我同时收到警告和错误,但在运行Build时,只有错误-认为不相关吗?)
我完全理解警告和错误消息的含义: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中的错误吗?如果是,是否有补丁?还是我做错了什么?是否有通函或类似文件?如果是,我如何查找?
任何建议都受到高度赞赏:)
更新:正如在评论中提及下面,我也使用Process Explorer的,它实际上检查是 Visual Studio中被锁定的文件。