部署Azure Function报Error calling sync triggers错误求助
问题说明
- 运行环境:项目目标框架为
netcoreapp3.1,Azure Functions版本为v3 - 初始故障:运行时抛出
Could not load file or assembly System.IdentityModel.Tokens.Jwt程序集加载错误 - 临时操作:为修复上述错误,在csproj的PropertyGroup节点添加
<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>配置,添加后应用无法正常部署 - 部署执行命令:
func azure functionapp publish <app-name>
- 部署返回错误信息:
Azure.Functions.Cli.Common.CliException: Error calling sync triggers (BadRequest). Request ID = '8352b514-e606-4316-b316-9ad47ad1e3b5'. at Azure.Functions.Cli.Helpers.RetryHelper.Retry(Func`1 func, Int32 retryCount, TimeSpan retryDelay, Boolean displayError) in D:\a\_work\1\s\src\Azure.Functions.Cli\Helpers\RetryHelper.cs:line 27 at Azure.Functions.Cli.Actions.AzureActions.PublishFunctionAppAction.SyncTriggers(Site functionApp) in D:\a\_work\1\s\src\Azure.Functions.Cli\Actions\AzureActions\PublishFunctionAppAction.cs:line 520 at Azure.Functions.Cli.Actions.AzureActions.PublishFunctionAppAction.PublishFunctionApp(Site functionApp, GitIgnoreParser ignoreParser, IDictionary`2 additionalAppSettings) in D:\a\_work\1\s\src\Azure.Functions.Cli\Actions\AzureActions\PublishFunctionAppAction.cs:line 504 at Azure.Functions.Cli.Actions.AzureActions.PublishFunctionAppAction.RunAsync() in D:\a\_work\1\s\src\Azure.Functions.Cli\Actions\AzureActions\PublishFunctionAppAction.cs:line 191 at Azure.Functions.Cli.ConsoleApp.RunAsync[T](String[] args, IContainer container) in D:\a\_work\1\s\src\Azure.Functions.Cli\ConsoleApp.cs:line 64
故障原因
<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>配置的作用是关闭Azure Functions默认的发布清理逻辑,发布时会全量上传本地输出目录的所有依赖文件,包括Functions宿主环境已经自带的系统程序集。上传的第三方版本程序集和宿主自带程序集版本冲突时,服务端同步触发器的校验流程就会失败,返回400 BadRequest错误,这种方式不适合用来解决单个程序集的加载问题。
解决步骤
- 第一步:移除csproj中添加的
<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>配置,将该值显式设为false,恢复默认的发布清理逻辑。 - 第二步:正规修复
System.IdentityModel.Tokens.Jwt程序集加载错误,不要依赖跳过发布清理的偏方:- 为项目安装和netcoreapp3.1、Azure Functions v3兼容的JWT相关类库版本,最高不要超过6.32.x版本,过高版本依赖的底层组件和当前运行时不兼容,在csproj中添加以下包引用:
<ItemGroup> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.32.3" /> <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.32.3" /> <PackageReference Include="Microsoft.IdentityModel.Logging" Version="6.32.3" /> </ItemGroup>- 清理本地项目的
bin、obj目录,执行dotnet restore重新还原所有依赖,避免本地缓存的旧版本dll引发冲突。
- 第三步:本地执行
func start启动函数实例,确认JWT程序集加载错误已经消失,功能运行正常。 - 第四步:清理Azure端函数应用的旧文件残留:登录Azure门户进入对应函数应用,打开Kudu控制台,清空
site/wwwroot目录下的所有旧发布文件,再重新执行func azure functionapp publish <app-name>命令完成部署。
补充说明:Azure Functions v3已经结束官方支持,条件允许的情况下建议升级到v4 LTS长期支持版本,可从根源上规避大量netcoreapp3.1相关的依赖兼容问题。
内容的提问来源于stack exchange,提问作者VeikkaGus
相关产品推荐
相关产品推荐

