发布Azure Functions后出现Microsoft.Azure.WebJobs.Script重复FunctionMetadata报错
Microsoft.Azure.WebJobs.Script: Found duplicate FunctionMetadata with the name XXX.
报错核心原因
该报错本质是Azure Functions运行时加载函数元数据时,检测到两条完全同名的函数记录导致冲突,常见触发场景如下:
- 本地项目存在重复命名的函数:C#类库中两个方法标注了相同值的
[FunctionName]特性,或是Node.js/Python等脚本类函数中,多个函数文件夹下function.json的name字段取值重复 - 发布时未清理目标端旧文件:多次增量发布过程中,之前部署的同名旧函数文件残留在Function App存储空间中,和新发布的函数重名
- 部署配置冲突:开启
WEBSITE_RUN_FROM_PACKAGE运行模式时,旧部署包缓存未清理,和新部署包内的函数重名 - 混合部署模式冲突:同时使用预编译函数部署和手写脚本函数部署,两类函数出现命名重复
排查步骤
- 首先检查本地项目:全局搜索所有函数的命名标识,确认不存在和报错中
XXX同名的重复函数声明 - 登录Azure门户进入对应Function App,左侧导航栏选择「函数」菜单,查看已列出的函数中是否存在两个名称为
XXX的条目 - 进入Function App的「高级工具(Kudu)」,打开
site/wwwroot目录,检查是否存在两个同名的函数文件夹,也可以查看Microsoft.Azure.WebJobs.Script.WebHost.metastore.json文件,确认FunctionMetadata节点下是否有重复的XXX条目 - 检查Function App配置项,确认
WEBSITE_RUN_FROM_PACKAGE参数取值,排查部署历史是否存在多次增量部署未清理旧文件的情况
解决方法
- 若本地存在重名函数:修改重复的函数命名标识,保证所有函数名称全局唯一后重新打包发布
- 若为旧文件残留:发布时在部署工具中勾选「部署前删除目标现有文件」,使用Azure CLI部署时可添加
--clean true参数,先清空目标端wwwroot目录的旧文件再发布新内容 - 若为包运行模式缓存问题:临时将
WEBSITE_RUN_FROM_PACKAGE配置改为0,清空wwwroot目录下所有旧文件后重新上传部署包,再改回原配置值 - 若为元数据缓存冲突:重启Function App,或进入Kudu控制台删除
D:\home\data\Functions\metastore目录下的所有缓存文件后再次重启应用即可
内容的提问来源于stack exchange,提问作者jong shin
相关产品推荐
相关产品推荐

