M1芯片Mac上VS Code编译Azure静态Web应用C# API报错求助
在M1芯片的MacBook上通过VS Code创建Azure静态Web应用,前端基于React.js,后端API使用C# Azure Function。编译Azure Function时出现以下错误:
Metadata generation failed. Exit code: '130' Error: 'Failed to load /usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.1.30/libhostpolicy.dylib, error: dlopen(/usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.1.30/libhostpolicy.dylib, 0x0001): tried: '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.1.30/libhostpolicy.dylib' (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)))An error occurred while loading required library libhostpolicy.dylib from [/usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.1.30]'
已安装的.NET SDK和Runtime列表:
dotnet --list-sdks 6.0.300 [/usr/local/share/dotnet/sdk] 6.0.301 [/usr/local/share/dotnet/sdk] 6.0.302 [/usr/local/share/dotnet/sdk] 6.0.400 [/usr/local/share/dotnet/sdk] 6.0.401 [/usr/local/share/dotnet/sdk] 6.0.402 [/usr/local/share/dotnet/sdk] dotnet --list-runtimes Microsoft.AspNetCore.App 6.0.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.7 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.9 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.10 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 3.1.25 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.26 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.27 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.28 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.29 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.30 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.6 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.7 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.8 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.9 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.10 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
排查线索
检查项目目标框架:
错误指向.NET Core 3.1运行时,确认项目是否误配置为依赖3.1版本,或项目文件(.csproj)中TargetFramework是否正确设置为net6.0(搭配Azure Functions v4)。验证.NET 3.1运行时架构:
执行命令file /usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.1.30/libhostpolicy.dylib,查看输出是否为x86_64。M1 Mac上.NET 3.1仅支持x86_64架构,需通过Rosetta兼容运行。强制指定编译架构:
在Azure Function的.csproj文件中添加架构配置:
若使用.NET 6,添加:<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <AzureFunctionsVersion>v4</AzureFunctionsVersion> <RuntimeIdentifier>osx-arm64</RuntimeIdentifier> </PropertyGroup>若坚持用.NET 3.1,添加:
<PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <AzureFunctionsVersion>v3</AzureFunctionsVersion> <RuntimeIdentifier>osx-x64</RuntimeIdentifier> </PropertyGroup>检查VS Code运行架构:
打开VS Code→左下角设置图标→关于,查看架构字段。若为arm64,右键VS Code图标→显示简介→勾选“使用Rosetta打开”,重启后再编译。清理项目缓存:
执行dotnet clean,手动删除项目的bin和obj文件夹,再重新执行dotnet build。确认Azure Functions Core Tools架构:
执行func --version,若为x86_64版本,需通过Rosetta启动终端/VS Code运行;若使用.NET 6,可重新安装arm64版本的Core Tools。
内容的提问来源于stack exchange,提问作者Victor

