如何在Apple M1芯片设备上正常运行Azure Function PowerShell
Apple M1 芯片设备运行 Azure Function PowerShell 可行方案
本地运行修复方案
旧版Azure Function Core Tools和PowerShell Worker仅打包了x64架构的macOS原生依赖,在arm64架构的M1设备上无法正确加载,按以下步骤操作:
- 卸载设备上已安装的x64版本.NET Core 3.1 SDK、旧版Azure Function Core Tools,清理残留的func命令软链接
- 确认终端运行在原生arm64模式下,不要勾选终端程序的“使用Rosetta打开”选项,避免后续安装x64版本的依赖包
- 安装arm64原生版本的.NET 6 SDK(Azure Function V4已正式支持.NET 6,无需依赖.NET Core 3.1)
- 执行
brew install azure-functions-core-tools@4安装arm64架构的最新版Core Tools,安装完成后执行func --version确认版本号≥4.0.5000 - 创建或打开现有PowerShell类型Function项目时,选择PowerShell 7.2及以上版本的工作进程,不要选择7.0及以下的旧版运行时
- 如果执行
func start仍提示找不到runtime.osx-x64.runtime.native.System.IO.Ports程序集,在项目根目录新建Directory.Build.props文件,写入以下配置强制指定运行时架构为arm64:
<Project> <ItemGroup> <RuntimeHostConfigurationOption Include="System.Runtime.InteropServices.RuntimeInformation.OSArchitecture" Value="arm64" /> </ItemGroup> </Project>
配置完成后重新执行func start即可正常启动。
Docker部署修复方案
原报错System.IO.IOException: Function not implemented是因为旧版Azure Function PowerShell镜像仅提供x64架构版本,通过QEMU转译运行时不支持FileSystemWatcher依赖的系统调用,按以下步骤操作:
- 替换基础镜像为支持原生arm64架构的版本:
mcr.microsoft.com/azure-functions/powershell:4.24-powershell7.4,不要使用4-powershell7.2这类无明确架构支持的滚动tag - 构建、启动镜像时不需要添加
--platform linux/amd64参数,Docker会自动拉取匹配arm64架构的镜像层,无转译损耗 - 若因业务限制必须使用旧版x64镜像,在Dockerfile中添加以下环境变量关闭运行时文件监控功能,绕开不兼容的系统调用:
ENV AzureFunctionsJobHost__FileWatchingEnabled=false ENV WEBSITE_ENABLE_SYNC_UPDATE_SITE=false
启动容器时直接执行func start --no-build即可,不需要额外添加转译参数。
验证方式
- 本地启动后访问
http://localhost:7071/api/<你的HTTP触发器路由>,返回预期响应即为运行成功 - Docker部署时映射服务端口到本地,访问对应端口下的触发器路由验证服务状态
内容的提问来源于stack exchange,提问作者as1984
相关产品推荐
相关产品推荐

