未找到工作职能。尝试公开您的工作类别和方法
Posted
技术标签:
【中文标题】未找到工作职能。尝试公开您的工作类别和方法【英文标题】:No job functions found. Try making your job classes and methods public 【发布时间】:2018-05-20 20:01:24 【问题描述】:首先,我查看了其他带有相同错误消息的 SO 帖子,但似乎没有一个可以解决我的问题。我尝试了许多排列和选项。我的函数构建良好,但不会在 CLI 中运行,我收到以下神秘错误。 MSFT 文档似乎也没有答案。
。如果您正在使用绑定扩展(例如 ServiceBus、Timers 等),请确保您已在启动代码中调用了扩展的注册方法(例如 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");
local.settings.json:
"IsEncrypted": false,
"Values":
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"Eventhub": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "",
"evingest": "Endpoint=sb://example.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=LtcqBLT5VWjg0dGMdIvxCcEGs8902010Y6y14iGg="
包
function.json - 缺少任何 eventthub 绑定!
"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"
【问题讨论】:
您介意升级到最新的 Sdk.Functions (1.0.6) 吗? 先去掉ServiceBus引用,再升级Sdk,再添加 ServiceBus 也应该是2.1.0-beta4
完成后,检查function.json
文件是否在bin\Debug\net461\CreateData
中生成
好的,在新项目中将程序集修复为正确版本可以解决此错误,但我确实注意到 bin 中构建的 functions.json 缺少 eventthub 绑定。该函数现在运行,但没有产生任何消息。
【参考方案1】:
我发现的另一个问题,尤其是当您从另一个项目或版本转换时。
在 VS csproj 文件中,确保存在 AzureFunctionsVersion
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
...etc
如果您正在修改缺少此功能的项目,该工具会自动添加此功能,但不会添加此功能。希望这可以帮助您节省我花费的 3 个小时 :-)。
【讨论】:
【参考方案2】:如果您在 .NET 5 中使用带有进程外执行模型的 Azure Functions,则需要将您的 FunctionName
替换为 Function
,否则将无法检测到该函数。
之前:
[FunctionName("CreateData")]
之后:
[Function("CreateData")]
【讨论】:
谢谢,如果使用 .NET 5,这确实是正确的答案!赞成(我不明白为什么有人反对这个答案,我赞成) 这里是官方文档:docs.microsoft.com/en-us/azure/azure-functions/… 该死的你救了我几个小时的疯狂,谢谢! 他们为什么要改变这个?【参考方案3】:您应该升级到最新的Microsoft.NET.Sdk.Functions
(1.0.6
,截至今天)和Microsoft.Azure.WebJobs.Service.Bus
(2.1.0-beta4
,如果在完整框架上运行)。您可能需要先删除 ServiceBus 引用才能升级 SDK。
Microsoft.Azure.Eventhubs
包也需要删除。所有相关类型等都在Microsoft.Azure.WebJobs.Service.Bus
还记得在包管理器中检查“包含预发布”以找到2.1.0-beta4
。
【讨论】:
【参考方案4】:在我的例子中,我只是从一个实际的函数目录运行命令。您应该改为从函数项目的根目录运行它!
【讨论】:
【参考方案5】:在我的例子中,线索是控制台输出开头的这条消息:
Can't determine project language from files. Please use one of [--csharp, --javascript, --typescript, --java, --python, --powershell]
添加 --csharp
参数就可以了。
【讨论】:
【参考方案6】:当我更改项目名称和其他一些重构时,它发生在我身上。更改后它可以在那台机器上运行,但是当我切换到另一台机器时,我得到了这个错误 - 即使它是相同的代码。
对我来说,解决方案基本上是创建一个随机的新 azure 函数并再次运行。下次运行时,我的所有函数都会出现在 cli 上。
【讨论】:
【参考方案7】:在我的情况下(net core 3.1 上的 v3)这是一个奇怪的情况,它以某种方式从 csproj 文件中删除。
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
【讨论】:
【参考方案8】:我从错误的文件夹运行“func start”。确保从 azure 函数的根文件夹运行它。这应该适用于任何语言(我使用的是 python)
【讨论】:
【参考方案9】:我的问题与其他答案不同:local.settings.json
明确包含在 .gitignore
定义中。因此,有一次该文件已从文件夹中删除,而我的本地构建无法理解要使用的正确运行时。
我从示例项目中提取了默认的local.settings.json
来检索文件。
【讨论】:
【参考方案10】:我很欣赏这里的其他答案。但就我而言,他们都没有使用 VS Code。
我仍在尝试使用 .NET 核心 SDK 版本 2.1,并且必须为我的 Azure 函数使用所有旧版本的依赖项。
即使看起来一切正常,我仍然无法在本地运行该功能。事实证明,还有一小步要做:
首先,发布你的项目dotnet publish
发表的东西应该在bin/Debug/netstandard2.0
。进入这个文件夹并运行你的函数:
cd bin/Debug/netstandard2.0 # I was using netstandard2.0 framework
func start --build # You can add --verbose flag for more detailed outputs
瞧!而已。为了清楚起见,这是我的版本:
.NET 核心 SDK 版本:2.1.810 Azure CLI 版本:2.12.0 Azure 函数版本:v2 Microsoft.NET.Sdk.Functions:1.0.37【讨论】:
【参考方案11】:如果您从 Visual Studio (F5) 调试/运行,不知何故,即使使用最新的 Microsoft.NET.Sdk.Functions (v1.0.28),它也无法检测到项目中定义的 AzureFunctions。
默认情况下,我根本没有以某种方式设置项目属性 > 调试 > 工作目录的问题。将其设置为找到二进制文件的实际目录,并且您的 AzureFunctions 可用于调试。
PS,这将添加 launchSettings.json /profiles/projectName/workingDirectory=/objd/amd64/
【讨论】:
【参考方案12】:如果它在bin/Debug/netcoreapp3.1/
等处工作,这是因为您在根目录中缺少一些需要的文件或在某些文件中缺少部分。 (例如:host.json)
我通过运行 func init --force
来恢复初始设置并使用 git 查找缺失的部分来解决此问题。
【讨论】:
【参考方案13】:在我的场景中,对于 现有项目,在 windows 中安装 azure 函数设置后,我错过了在 .csproj 文件中提供参考
在这里
你可以在 VS Code Func init --force 上运行命令并选择 Dotnet 模板 然后删除自动创建的 .csproj 文件.
local.settings.json
"Values":
"AzureWebJobsStorage": "UseDevelopmentStorage=false",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
.csproj 文件
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />
</ItemGroup>
如果您像我一样使用 Visual Studio 代码,我希望有人能提供帮助。
【讨论】:
【参考方案14】:我收到了错误
找不到工作职能
当我的防火墙阻止 azure functions 程序连接到互联网时。
【讨论】:
【参考方案15】:由于某种原因,我的工作项目在 csproj 文件中复制了以下信息,因此在本地运行 AzFunction 时遇到了同样的错误。我删除了多余的线条,它工作得很好。
<ItemGroup>
<None Include="Function1.cs" />
</ItemGroup>
【讨论】:
以上是关于未找到工作职能。尝试公开您的工作类别和方法的主要内容,如果未能解决你的问题,请参考以下文章
Kong 入门指南 - 通过Kong Gateway公开您的服务