Error MSB4018:GenerateDepsFile任务意外失败的解决求助
近期安装了VS2022和VSC,从Git拉取项目后在VS2022中打开时出现错误 Error MSB4018 The "GenerateDepsFile" task failed unexpectedly。在VS2019中打开该项目也会出现相同错误,但VS2019中其他项目可正常运行。
错误详情
Severity Code Description Project File Line Suppression State
Error MSB4018 The "GenerateDepsFile" task failed unexpectedly.
System.IO.IOException: The device is not ready.at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at Microsoft.NET.Build.Tasks.GenerateDepsFile.WriteDepsFile(String depsFilePath)
at Microsoft.NET.Build.Tasks.TaskBase.Execute()
at Microsoft.NET.Build.Tasks.TaskWithAssemblyResolveHooks.Execute()
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() Enteo.Lifocolor C:\Program Files\dotnet\sdk\8.0.204\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets 284
已尝试的无效操作
- 参考Stack Overflow相关话题的方案
- 删除项目的
bin和.vs文件夹 - 重启Windows Server机器
- 执行清理/重建/构建操作
- 将项目推送到Git后拉取到不同路径打开
- 同事拉取相同项目无异常
可行的解决办法
1. 排查磁盘与路径问题
错误提示The device is not ready直接指向磁盘访问异常,优先处理:
- 用管理员权限打开命令提示符,执行磁盘检查修复命令(替换X为项目所在磁盘盘符):
chkdsk X: /f /r - 确认项目路径不含中文、空格或特殊字符,将项目移动到纯英文无空格的路径下测试
2. 修复或重装.NET SDK
问题出在.NET SDK 8.0.204的构建目标文件中,可能是SDK损坏:
- 打开
控制面板 > 程序和功能,找到.NET SDK 8.0.204,选择更改 > 修复 - 修复无效则卸载该SDK,重新下载安装对应版本
3. 指定构建临时目录
构建过程中临时文件写入失败也会触发该错误,手动指定临时目录:
- 打开项目属性,进入
生成 > 事件,在预生成事件命令行中添加:
确保C:\Temp目录存在且有读写权限set TEMP=C:\Temp set TMP=C:\Temp
4. 重置Git仓库拉取完整代码
本地拉取可能存在文件损坏,强制重置后重新拉取:
git fetch origin git reset --hard origin/[你的分支名]
- 检查项目中是否有符号链接或特殊文件,这类文件在Windows下易引发访问问题,可删除或替换
5. 排查VS扩展干扰
部分扩展会影响构建流程:
- 按住Ctrl键启动VS进入安全模式,尝试构建项目
- 若安全模式下正常,逐一禁用扩展排查出干扰项
内容的提问来源于stack exchange,提问作者Lukasz Wilczewski

