MAUI Blazor Hybrid .NET8.0-iOS发布iOS归档失败求助
问题详情
发布MAUI Blazor Hybrid .NET 8.0 iOS应用时,归档创建失败,核心错误信息:
Xamarin.VisualStudio.Progress.ProgressReportService Information: 0 :
!Cannot create an IOS archive 'MyProject'. Process cannot be executed
on XMA server. The "Unzip" task failed unexpectedly.
System.NotSupportedException: The given path's format is not
supported. at
System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String
fullPath) at
System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean
checkHost) at
Xamarin.MacDev.CompressionHelper.TryDecompressUsingSystemIOCompression(TaskLoggingHelper
log, String zip, String resource, String decompressionDir) in
/Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Decompress.cs:line
200 at
Xamarin.MacDev.CompressionHelper.TryDecompress(TaskLoggingHelper log,
String zip, String resource, String decompressionDir, List`1
createdFiles, String& decompressedResource) in
/Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Decompress.cs:line
104 at Xamarin.MacDev.Tasks.Unzip.ExecuteLocally() in
/Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs:line
61 at Xamarin.MacDev.Tasks.Unzip.Execute() in
/Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs:line
43 at
Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at
Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()
开启诊断级构建输出后发现,构建时错误拼接路径,且选择发布iOS仍编译Android文件,触发路径格式不支持警告:
Ditto: 2024-02-05T17:50:53.1156162+02:00 - Creating output 'obj\Release\net8.0-ios\ios-arm64\ipa\Payload\MyApp.app**\C:\T**\MYdIR\MyApp\Platforms\Android\google-services.json'...
C:\Program Files\dotnet\packs\Microsoft.iOS.Sdk\17.2.8004\tools\msbuild\iOS\Xamarin.iOS.Common.targets(391,3): warning : The given path's format is not supported.
重现步骤
- 完成MAUI Blazor项目开发
- 成功重建DEBUG模式项目
- 成功重建RELEASE模式项目
- 设置项目属性及iOS发布签名
- 构建iOS发布归档文件时弹出错误
- 开启构建输出诊断,定位到路径拼接错误及Android文件编译问题
解决方案
排除iOS构建中的Android资源
编辑项目.csproj文件,添加以下配置,确保iOS构建时不包含Android平台文件:<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-ios'"> <None Remove="Platforms\Android\**" /> <Compile Remove="Platforms\Android\**" /> </ItemGroup>或在Visual Studio中选中Android平台文件(如
google-services.json),右键设置生成操作为None,并添加条件$(TargetFramework) == 'net8.0-ios'。清理重构项目
- 执行命令:
dotnet clean - 删除项目根目录下的
obj和bin文件夹 - 重启Visual Studio,选择iOS平台重新构建并发布
- 执行命令:
检查项目路径
确保项目所在路径无特殊字符(空格、非ASCII字符等),若有则迁移到简洁路径下。更新iOS SDK
执行命令更新至最新稳定版:dotnet workload update ios,修复已知构建路径问题。
内容的提问来源于stack exchange,提问作者Michael Brooks

