Azure Functions V1(基于.NET Framework 4.8)TimerTrigger函数未被发现求助
我现在在运行一个基于.NET Framework 4.8的Azure Functions V1定时触发函数,但函数宿主始终无法识别到它,代码大概是这样的:
using System; using System.Threading.Tasks; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace ScreeningSync { public static class ScreeningSyncFunction { [FunctionName("ScreeningSync")] public static async Task Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); // 业务逻辑代码 } } }
我之前维护V1版本函数的时候也踩过一模一样的坑,给你几个实用的排查方向,试试能不能解决:
先确认FunctionName特性有没有写对
你贴的代码里[Function的内容明显没写完,一定要给函数加上[FunctionName("你的函数名")]这个特性,这可是V1宿主识别函数的核心标识,少了它肯定找不到你的定时函数。检查NuGet包版本是否匹配V1要求
V1版本对依赖包版本卡得特别严,你得确保Microsoft.Azure.WebJobs、Microsoft.Azure.WebJobs.Extensions这些核心包都是1.x系列的,要是不小心装了V2/V3的包,版本不兼容直接就会导致宿主识别失败。验证host.json和local.settings.json配置
定时触发器依赖存储来跟踪执行记录,先看根目录下的host.json有没有正确配置扩展:{ "extensions": { "timer": { "scheduleMonitor": { "storageConnectionString": "AzureWebJobsStorage" } } } }再检查
local.settings.json里的AzureWebJobsStorage连接字符串是不是有效的,本地调试用Azure Storage Emulator的连接字符串也行,空的或者无效的都会出问题。确认项目类型和调试配置
右键项目看属性,在“Application”标签里确认目标框架是.NET Framework 4.8,调试启动项是Microsoft.Azure.WebJobs.Host,要是启动程序选错了,宿主也不会加载你的函数。清理重建+重启宿主试试
有时候就是缓存搞的鬼,先右键项目选“清理”,然后重建解决方案,再把本地的Functions宿主控制台关掉重新启动,说不定就能识别到你的定时函数了。
备注:内容来源于stack exchange,提问作者tripler25

