c# - 如何从引用的 nuget 包加载 azure 事件函数

标签 c# azure service cloud azure-durable-functions

我已经实现了一个 Azure 持久函数,如您所知,它包含我的编排编排事件
重点是我的事件之一是在另一个程序集中实现的,我将其引用为 nuget 包。
现在的问题是,当我在 Visual Studio 中运行我的解决方案时,所有 Azure Functions 均由 AzureFunctionsTools 加载但位于 nuget 包中的此事件未列出,我面临以下错误消息:

错误: “MyExternalActivity”不存在、已禁用或不是事件函数。附加信息:以下是已知的事件函数:“MyLocalActivity”。

这是我在 nuget 项目中的 MyExternalActivity 定义:

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
...
}

这是我的 Orchestrator 类:

[FunctionName(FunctionName)]
public static async Task RunOrchestrator([OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger log)
 {
    ...
    await context.CallActivityAsync<object>("MyLocalActivity", parameters); // Successfull; code is in this solution
    ...   
    ...
    await context.CallActivityAsync<object>("MyExternalActivity" , parameters); // Error; Referenced by nuget package
    ...
}

注意:我尝试删除引用并将 nuget 代码项目添加到相同的解决方案并直接通过项目引用,但发生了相同的错误

最佳答案

您遇到此问题的原因是调用不同的函数与调用不同项目或 nuget 包中的方法不同。它们是完全独立的实体,因此添加引用不会导致包含事件函数。

实现此目的的正确方法是在单个项目中定义这两个函数。您绝对可以将函数定义作为 shell,然后调用 nuget 包中的代码。

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
    MethodFromNugetPackage(context);
}

如果您想在不同的项目中使用这些功能,有几个选项:

1) 在 Azure 中拥有多个 Function 服务。

2) 在关闭“删除目标中的其他文件”的情况下部署代码。这假设您从 Visual Studio 进行部署,因此如果您使用不同的部署方法,您将需要查找并调整等效设置。需要明确的是,建议这样做,因为您可能会遇到难以追踪的问题,但它应该有效。 enter image description here

关于c# - 如何从引用的 nuget 包加载 azure 事件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55897954/

相关文章:

c# - 测量 RichTextBox 控件中的字符串

azure - 您的凭据不起作用 Azure VM

azure - Azure 策略中的存在条件?

android - 服务的 Intent.replaceExtras(bundle) 未按预期工作

Android:如何知道接收者已经以编程方式接听了我的电话?

android - Google (Play) sleep 模式下的位置服务更新间隔变化 (Android)

c# - 如何在不返回对象、IActionResult 等的情况下在 ASP.NET Core 中返回自定义 HTTP 状态/消息?

c# - 如何在 ASP.NET MVC 验证期间提供警告?

c# - 使用 Regex .net 替换指定的字符

azure - "Failed to delete integration runtime."Azure 数据工厂