使用.NET 7构建Android项目失败:无法编译原生汇编文件
问题:.NET 7 Android项目构建随机出现XA3006错误
现象说明
在Visual Studio for Mac 2022中通过模板创建Android项目(已勾选支持ABI:armeabi-v7a),使用.NET 7(目标框架net7.0-android33.0.0)构建时,会随机出现一个或多个XA3006编译错误,但切换到.NET 6(net6.0-android)时项目可正常运行。
错误日志
Xamarin.Android.Common.targets(3,3): Error XA3006: Could not compile native assembly file: environment.arm64-v8a.ll stderr | /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: error: /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: environment.arm64-v8a.ll:554:7: error: expected value token stderr | i32 −1, ; apk_fd (XA3006) (AndroidApp1) Xamarin.Android.Common.targets(1979, 3): [XA3006] Could not compile native assembly file: environment.x86.ll stderr | /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: error: /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: environment.x86.ll:593:7: error: expected value token stderr | i32 −1, ; apk_fd Xamarin.Android.Common.targets(1979, 3): [XA3006] Could not compile native assembly file: environment.armeabi-v7a.ll stderr | /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: error: /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: environment.armeabi-v7a.ll:593:7: error: expected value token stderr | i32 −1, ; apk_fd Xamarin.Android.Common.targets(1979, 3): [XA3006] Could not compile native assembly file: environment.x86_64.ll stderr | /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: error: /usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/33.0.26/tools/Darwin/binutils/bin/llc: environment.x86_64.ll:593:7: error: expected value token stderr | i32 −1, ; apk_fd
项目csproj配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net7.0-android33.0.0</TargetFramework> <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion> <OutputType>Exe</OutputType> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <ApplicationId>com.companyname.AndroidApp1</ApplicationId> <ApplicationVersion>1</ApplicationVersion> <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion> <TargetFrameworkVersion>v11.0</TargetFrameworkVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <AndroidEnableMultiDex>false</AndroidEnableMultiDex> <AndroidPackageFormat>apk</AndroidPackageFormat> </PropertyGroup>
系统环境
.NET SDK: Version: 7.0.202 Commit: 6c74320bc3 Runtime Environment: OS Name: Mac OS X OS Version: 13.2 OS Platform: Darwin RID: osx.13-arm64 Base Path: /usr/local/share/dotnet/sdk/7.0.202/ Host: Version: 7.0.4 Architecture: arm64 Commit: 0a396acafe .NET SDKs installed: 6.0.407 [/usr/local/share/dotnet/sdk] 7.0.202 [/usr/local/share/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 6.0.15 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 7.0.4 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 6.0.15 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 7.0.4 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Other architectures found: x64 [/usr/local/share/dotnet/x64] registered at [/etc/dotnet/install_location_x64] Environment variables: Not set global.json file: Not found
问题原因及解决方法
原因
这是Xamarin.Android的编码Bug导致:在非英文系统语言环境下,生成的LLVM IR文件(如environment.*.ll)中,半角减号-被错误替换为全角减号−,而llc编译器无法识别全角符号,因此抛出"expected value token"错误。
解决方法
- 临时修复:找到报错的
.ll文件(路径在错误日志中已给出),打开后将所有全角减号−替换为半角减号-,保存后重新构建项目。 - 永久修复:
- 更新Xamarin.Android到已修复该Bug的版本;
- 调整系统语言环境为英文,避免编码转换时出现符号替换问题。
内容的提问来源于stack exchange,提问作者Henrik
相关产品推荐
相关产品推荐

