添加Firebase项目后Xamarin iOS构建失败(UnpackFrameworks任务失败)
问题说明
添加Xamarin.Firebase.Messaging(或其他Firebase组件)后,iOS端构建失败,卸载Firebase组件后项目可正常构建。推测是HotRestart解压框架文件时,无法覆盖已存在文件导致的错误。
环境信息
- Visual Studio 2022 Community
- 部署目标:iPhoneX真机
已尝试的无效操作
- 删除obj/bin目录、清理解决方案后重新构建
- 重启电脑
- 修改注册表启用Windows长路径支持
错误信息
2> C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: The "UnpackFrameworks" task failed unexpectedly.
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: System.IO.IOException: The file 'obj\iPhone\Debug\Frameworks\FirebaseFirestore.framework\FirebaseFirestore' already exists.
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at System.IO.FileInfo.CopyTo(String destFileName)
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at Xamarin.iOS.Tasks.Windows.Zip.CopyDirectory(String source, String destination) in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.iOS.Tasks.Windows/Zip.cs:line 32
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at Xamarin.iOS.Tasks.Windows.Zip.Extract(String sourceFileName, String destinationPath) in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.iOS.Tasks.Windows/Zip.cs:line 18
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at Xamarin.iOS.HotRestart.Tasks.UnpackFrameworks.Execute() in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.iOS.Tasks.Windows/Tasks/UnpackHotRestartFrameworks.cs:line 55
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.HotRestart.targets(75,3): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()
解决方案建议
- 清除HotRestart缓存:找到路径
C:\Users\[你的用户名]\AppData\Local\Xamarin\HotRestart,删除该目录下所有内容,重新构建项目。 - 强制覆盖解压文件:编辑项目的
.csproj文件,添加如下配置:<PropertyGroup> <HotRestartUnpackOverwrite>true</HotRestartUnpackOverwrite> </PropertyGroup> - 禁用HotRestart改用Mac构建:打开Visual Studio
工具 > 选项 > Xamarin > iOS设置,勾选使用Mac进行iOS开发,配置Mac主机连接后重新构建。 - 更新相关包:将Xamarin.iOS及所有Firebase相关NuGet包更新至最新稳定版本,修复旧版本兼容性问题。
内容的提问来源于stack exchange,提问作者RS868553

