Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用Azure函数的属性在Visual Studio 2017中不起作用_C#_Azure_Azure Functions_Timer Trigger - Fatal编程技术网

C# 禁用Azure函数的属性在Visual Studio 2017中不起作用

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, 禁用仅接受字符串值。 有没有办法改变这一点?或任何其他禁用函数的方法?字符串类型的值

我有一个带有计时器触发器的Azure函数

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
    时的
    runnstartup=true
    参数。这一个(我只使用调试编译器指令启用),将允许我立即触发计时器函数,而无需等待下一个CRON周期发生。(另一种方法是向您的本地函数端点发送post,如上所述)。因此,同样,假设您在版本配置中运行生产工作负载,这只会影响本地开发环境,而不会影响开发团队或版本
第一个代码段(属性)

#如果调试
[禁用(“禁用transactioncrawler”)]
#恩迪夫
[FunctionName(“TransactionCrawler”)]
公共异步任务运行([TimerTrigger(“50*/10****”
#如果调试
,runnstartup=true
#恩迪夫
)]TimerInfo myTimer,ILogger日志)
{
//逻辑来了
}
第二个代码段(local.appsettings.json)

以下“解决方案”通常会影响您的生产代码,从而导致问题:

  • 仅使用
    Disable()
    不允许您在以后对其进行配置/更改
  • 更新host.json文件以仅包含要运行的触发器也可能导致此更改进入生产环境

这正在门户网站上运行。但不在本地调试环境中工作。(Visual Studio 2017)是的,你是对的。如果不想运行该函数,可以退出调试。为什么要在调试环境中禁用该函数?我还测试了“disabled”:在本地环境中为true。它也不能工作。它认为我们的本地环境将跳过此属性,因为我们不能在本地环境中随时停止该功能。我有40个功能。我只想测试一个函数而不运行其他函数。对于您的场景,您可以注释掉不想测试的FunctionName属性。例如,//[FunctionName(“Function1”)]向Azure功能团队提出了此问题。门户也存在同样的问题。更多信息:伙计们,Disable()属性中的参数不是一个布尔值,而是一个可以包含布尔值的appsetting。(有关更多信息和代码片段,请参见我的答案)
{
  "Values": 
  {
    "disable-transactioncrawler": false
  }
}