c# - 如何从引用的 nuget 包中加载 azure 活动函数
问题描述
我已经实现了一个 Azure 持久功能,如您所知,它包含我的Orchestration、Orchestrator和Activities。
关键是我的一项活动是在另一个程序集中实现的,我将其引用为 nuget 包。
现在的问题是,当我在 Visual Studio 中运行我的解决方案时,AzureFunctionsTools 加载了所有 Azure Functions,但未列出位于 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 进行部署,因此如果您使用不同的部署方法,则需要查找并调整等效设置。需要明确的是,不建议这样做,因为您可能会遇到难以追踪的问题,但它应该可以工作。
推荐阅读
- reactjs - 如何在 npm 脚本中使用自定义 env(.env.production.abc) 文件
- angular - 如何将运行时有效的功能从组件移动到服务
- python - 将等高线图和线图作为单独的子图返回 - Matplotlib
- javascript - 在 if 语句上使用 Promise
- c# - 调用 API 同步还是异步?
- visual-studio-code - Intellisense 在代码片段中不起作用 - VS Code
- c# - 如何在一个gridview上列出多个数据库?
- javascript - 谁能帮我更新这个 javascript 以创建指向另一个页面的链接
- html - 无法对齐移动设备的品牌标识、图标和汉堡菜单按钮
- android - startActivityForResult 不能在片段中工作并且不能启动活动