找不到工作职能。尝试公开您的工作类别和方法

Mur*_*oft 4 c# azure-webjobs azure-webjobssdk azure-functions azure-functions-runtime

首先,我查看了具有相同错误消息的其他SO帖子,但似乎没有一个可以解决我的问题。我尝试了许多排列和选项。我的函数构建良好,但无法在CLI中运行,我收到以下神秘错误。MSFT文档似乎也没有答案。

找不到工作职能。尝试公开您的工作类别和方法。如果您正在使用绑定扩展(例如ServiceBus,Timer等),请确保已在启动代码(例如config.UseServiceBus(),config.UseTimers()等)中调用了扩展的注册方法。 )。

我正在尝试运行计时器作业,然后将消息集合写入事件中心。我想念什么?我已经为此战斗了好几个小时。

功能:

    [FunctionName("CreateData")]
    public static async Task Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer,
        [EventHub("murraytest", Connection = "evingest")] IAsyncCollector<string> myeventhub,
        TraceWriter log)
    {
        await myeventhub.AddAsync("data1");
        await myeventhub.AddAsync("data2");
        await myeventhub.AddAsync("data3");

        log.Info($"COMPLETED: {DateTime.Now}");
    }
Run Code Online (Sandbox Code Playgroud)

local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "Eventhub": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "",
    "evingest": "Endpoint=sb://example.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=LtcqBLT5VWjg0dGMdIvxCcEGs8902010Y6y14iGg="

  }
}
Run Code Online (Sandbox Code Playgroud)

配套

努吉特

function.json-缺少任何eventhub绑定!

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "timerTrigger",
      "schedule": "0 */5 * * * *",
      "useMonitor": true,
      "runOnStartup": false,
      "name": "myTimer"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\bin\\AzFuncs.dll",
  "entryPoint": "AzFuncs.Function1.Run"
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*hom 49

如果您在 .NET 5 或更高版本中使用具有进程外执行模型的 Azure Functions,则需要将您的替换为FunctionNameFunction否则将无法检测到该函数。

前:

[FunctionName("CreateData")]
Run Code Online (Sandbox Code Playgroud)

后:

[Function("CreateData")]
Run Code Online (Sandbox Code Playgroud)

  • FunctionAttribute 的 Nuget 包和命名空间是什么? (8认同)
  • 我认为这个回应可能被否决的原因是因为很容易错过“进程外执行模型”参考,并且原始帖子中的错误消息没有指示进程内或进程外。澄清一下:[Function] 是进程外的,[FunctionName] 是进程内的属性。我来到这里是因为我在 Azure 建议上查找从 v3 到 v4 的进程内升级中的错误消息,并在进程中收到此错误消息。在这种情况下,[Function] 属性是一个转移注意力的东西。 (7认同)
  • 使用最新 VS 2022 的 Function 项目创建过程完全缺乏质量,令人难以置信。Azure Functions 团队,有人在关注吗? (5认同)
  • 该死的,你救了我几个小时的疯狂,谢谢! (3认同)

小智 17

我随机遇到这个问题,但它只影响一个类中的功能。结果我只需要先跑一次dotnet clean


Cel*_*dus 14

作为现有答案的补充:我们在从 .net 6 进程内模式升级到具有 dotnet 隔离模式的 .net 8 时遇到了这个问题。

因此,nugets 依赖关系从Microsoft.Azure.WebJobs.*进程内绑定)更改为Microsoft.Azure.Functions.Worker隔离绑定)。我们还重命名[FunctionName("MyFunction")][Function("MyFunction")].

所以在 中local.settings.json仍然FUNCTIONS_WORKER_RUNTIME是 的旧值dotnet,但正确的值必须是:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)


Sup*_*pez 10

我的问题与其他答案不同:local.settings.json明确包含在.gitignore定义中。因此,该文件未包含在克隆中,并且本地构建无法理解哪个是要使用的正确运行时。

我从示例项目中提取了默认值local.settings.json来恢复文件。


Mar*_*rkD 9

我发现的另一个陷阱尤其是如果您要从另一个项目或版本进行转换。

在VS csproj文件中,确保存在AzureFunctionsVersion

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
...etc
Run Code Online (Sandbox Code Playgroud)

该工具会自动添加它,但是如果您要修改缺少的项目,则不会添加。希望这可以帮助您节省花费我3个小时的时间:-)。


Ger*_*ard 7

就我而言,我只是从实际的函数目录运行命令。您应该从函数项目的根目录运行它!


Mik*_*kov 5

您应该升级到最新的Microsoft.NET.Sdk.Functions1.0.6截至今天)和Microsoft.Azure.WebJobs.Service.Bus2.1.0-beta4如果在完整框架上运行)。您可能需要先删除 ServiceBus 引用才能升级 SDK。

Microsoft.Azure.Eventhubs还需要删除该包。所有相关类型等都在Microsoft.Azure.WebJobs.Service.Bus

还要记得在包管理器中检查“包括预发布”以找到2.1.0-beta4.