因无法删除的.exe文件导致Visual Studio 2022项目构建失败
问题描述
使用Visual Studio 2022开发.NET 6.0 Web应用时,近一周构建偶尔卡在_CopyOutOfDateSourceItemsToOutputDirectory任务阶段,需通过任务管理器结束MSBuild.exe才能终止操作,重启构建仍重复卡住。开启详细构建日志后,最后输出内容如下:
Building target "_CopyOutOfDateSourceItemsToOutputDirectory" completely.
1> Input file "C:...obj\Debug\net6.0-windows\apphost.exe" is newer than output file "bin\Debug\net6.0-windows\EmployeeCheckSystem.exe".
1> Task "Copy"
1> Task Parameter:DestinationFiles=bin\Debug\net6.0-windows\EmployeeCheckSystem.exe
1> Task Parameter:SourceFiles=C:...obj\Debug\net6.0-windows\apphost.exe
1> Task Parameter:OverwriteReadOnlyFiles=False
1> Copying file from "C:...obj\Debug\net6.0-windows\apphost.exe" to "C:...bin\Debug\net6.0-windows\EmployeeCheckSystem.exe".
尝试删除EmployeeCheckSystem.exe时,即使使用管理员权限也无法成功,无任何提示信息,文件始终存在。仅能通过重启电脑后删除文件并重新构建,且重启后无需删除文件即可正常完成构建。该问题仅影响单个项目。
解决方案
排查文件锁定进程:
使用微软Sysinternals的Process Explorer工具,按Ctrl+F搜索EmployeeCheckSystem.exe,找到锁定该文件的进程并结束,之后重新尝试构建,无需重启电脑。修改Copy任务覆盖规则:
在项目的.csproj文件中添加以下配置,强制Copy任务覆盖只读文件:<PropertyGroup> <CopyOverwriteReadOnlyFiles>true</CopyOverwriteReadOnlyFiles> </PropertyGroup>清理项目缓存目录:
手动删除项目根目录下的bin和obj文件夹,再重新打开Visual Studio执行构建;也可通过VS菜单栏的生成 > 清理解决方案,随后执行生成解决方案。关闭快速部署功能:
打开项目属性的调试选项卡,取消勾选启用快速部署(调试时),该功能可能导致调试过程中文件被持续锁定。更新开发环境:
将Visual Studio 2022更新至最新版本,同时安装.NET 6.0 SDK的最新补丁包,部分文件锁定问题属于SDK已知bug,更新后可修复。排除杀毒软件扫描:
临时关闭系统防病毒软件测试构建是否正常,若恢复正常,将项目的bin和obj目录添加到杀毒软件的排除列表,避免实时扫描锁定文件。
内容的提问来源于stack exchange,提问作者Alexis Mercado Marquez

