我想添加这个答案,因为我也一直在寻找它,并且我相信我找到了一种禁用功能以进行调试/开发的好方法(并避免这些本地更改进入部署管道/源代码控制)。
我将#if DEBUG
语句与Disable(string SettingsName)
属性结合起来:
以下代码显示了不同的工作:
- Disable 属性不是使用参数来指示 True 或 False 作为值,而是引用一个 appsetting(您可以将其放入 local.settings.json 文件中)。请参阅本文中的第二个片段。因此,只需更改 appsettings 文件中的设置,我就可以轻松启用和禁用触发器,而不会影响我的 git 存储库或部署管道。
- 另一个有趣的事情是
RunOnStartup = true
使用TimerTrigger
. 这个(我只使用 DEBUG 编译器指令启用)将允许我立即触发计时器功能,而无需等待下一个 CRON 周期发生。(另一种方法是向您的本地函数端点发布帖子,如this stackoverflow post中所述)。同样,当假设您在 RELEASE 配置中运行生产工作负载时,这只会影响您的本地开发环境,而不是您的开发团队或版本。
第一个片段(属性)
#if DEBUG
[Disable("disable-transactioncrawler")]
#endif
[FunctionName("TransactionCrawler")]
public async Task Run([TimerTrigger("50 */10 * * * *"
#if DEBUG
, RunOnStartup = true
#endif
)]TimerInfo myTimer, ILogger log)
{
// Logic comes here
}
第二个片段(local.appsettings.json)
{
"Values":
{
"disable-transactioncrawler": false
}
}
以下“解决方案”通常会影响您的生产代码,这可能会导致问题:
- 仅使用
Disable()
不允许您事后配置/更改它
- 更新 host.json 文件以仅包含您要运行的触发器也有可能使此更改到达生产环境。