C# 禁用Azure函数的属性在Visual Studio 2017中不起作用
我有一个带有计时器触发器的Azure函数C# 禁用Azure函数的属性在Visual Studio 2017中不起作用,c#,azure,azure-functions,timer-trigger,C#,Azure,Azure Functions,Timer Trigger,我有一个带有计时器触发器的Azure函数 public static void Run([TimerTrigger("0 */15 * * * *"), Disable("True")]TimerInfo myTimer, TraceWriter log) 此处的禁用(“true”)无效。它生成函数.json,如下所示 “disabled”:“True”,这是不正确的。它应该是“disabled”:True, 禁用仅接受字符串值。 有没有办法改变这一点?或任何其他禁用函数的方法?字符串类型的值
public static void Run([TimerTrigger("0 */15 * * * *"), Disable("True")]TimerInfo myTimer, TraceWriter log)
此处的禁用(“true”)
无效。它生成函数.json
,如下所示
“disabled”:“True”,
这是不正确的。它应该是“disabled”:True,
禁用仅接受字符串值。
有没有办法改变这一点?或任何其他禁用函数的方法?字符串类型的值“disabled”:“true”也可以禁用函数。请参见以下测试结果
这是我的函数定义
public static void Run([TimerTrigger("0 */5 * * * *"),Disable("true")]TimerInfo myTimer, TraceWriter log)
以下是Azure portal上发布的函数
禁用属性默认值为
true
使用Disable()
而不是Disable(“true”)
所以代码看起来像
publicstaticvoidrun([TimerTrigger(“0*/15****”),Disable()]TimerInfo myTimer,TraceWriter log)
如果要启用函数,请使用
禁用(“False”)
您是否尝试过在解决方案中修改host.json?它具有以下属性,您可以指定在运行时加载哪些函数
// Array of functions to load. Only functions in this list will be enabled.
// If not specified, all functions are enabled.
"functions": ["QueueProcessor", "GitHubWebHook"]
请注意,如果您的解决方案中有多个功能应用程序项目,您还需要更改相应的host.json(即每个项目都有自己的host.json)
文档:可以通过
local.settings.json
以以下方式单独禁用函数2.x
{
"IsEncrypted": false,
"Values": {
"AzureWebJobs.MyFunctionNameOne.Disabled": "true",
"AzureWebJobs.MyFunctionNameTwo.Disabled": "true",
...
}
}
Ref:我尝试使用local.settings.json禁用,当在本地调试时,emulator窗口实际上表示命名函数已禁用,但仍会调用它!2017年和2019年的情况相同 我当前使用的解决方法是将此应用程序设置作为我函数的第一行进行测试,并立即返回:
if(ConfigurationManager.AppSettings["AzureWebJobs.TimerTriggeredFunction.Disabled"] == "true") return;
我想添加这个答案,因为我也一直在搜索它,我相信我找到了一个很好的方法来禁用用于调试/开发目的的函数(并避免这些本地更改进入部署管道/源代码管理) 我将
#if DEBUG
语句与Disable(string SettingsName)
属性相结合:
下面的代码显示了工作中的不同情况:
- Disable属性没有使用参数将True或False表示为值,但它引用了一个appsetting(您可以将其放在local.settings.json文件中)。请参阅本文中的第二个片段。因此,只要在appsettings文件中更改这些设置,我就可以轻松启用和禁用触发器,而不会影响我的git repo或部署管道
- 另一件有趣的事情是使用
时的TimerTrigger
参数。这一个(我只使用调试编译器指令启用),将允许我立即触发计时器函数,而无需等待下一个CRON周期发生。(另一种方法是向您的本地函数端点发送post,如上所述)。因此,同样,假设您在版本配置中运行生产工作负载,这只会影响本地开发环境,而不会影响开发团队或版本runnstartup=true
#如果调试
[禁用(“禁用transactioncrawler”)]
#恩迪夫
[FunctionName(“TransactionCrawler”)]
公共异步任务运行([TimerTrigger(“50*/10****”
#如果调试
,runnstartup=true
#恩迪夫
)]TimerInfo myTimer,ILogger日志)
{
//逻辑来了
}
第二个代码段(local.appsettings.json)
以下“解决方案”通常会影响您的生产代码,从而导致问题:
- 仅使用
不允许您在以后对其进行配置/更改Disable()
- 更新host.json文件以仅包含要运行的触发器也可能导致此更改进入生产环境
{
"Values":
{
"disable-transactioncrawler": false
}
}