Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# 如何从引用的nuget包加载azure活动函数_C#_Azure_Service_Cloud_Azure Durable Functions - Fatal编程技术网

C# 如何从引用的nuget包加载azure活动函数

C# 如何从引用的nuget包加载azure活动函数,c#,azure,service,cloud,azure-durable-functions,C#,Azure,Service,Cloud,Azure Durable Functions,我已经实现了一个Azure持久功能,如您所知,它包含我的编排、编排器和活动重点是我的一个活动在另一个程序集中实现,我将其引用为nuget程序包。现在的问题是,当我在Visual Studio中运行我的解决方案时,AzureFunctionsTools加载了所有Azure函数,但未列出nuget程序包中的此活动,我面临以下错误消息: 错误:MyExternalActivity不存在、已禁用或不是活动函数。其他信息:以下是已知的活动功能:“MyLocalActivity”。 以下是我在nuget项目

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

错误:MyExternalActivity不存在、已禁用或不是活动函数。其他信息:以下是已知的活动功能:“MyLocalActivity”。

以下是我在nuget项目中对MyExternalActivity的定义:

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
...
}
[函数名(函数名)]
公共异步任务运行([ActivityTrigger]DurableActivityContextBase上下文)
{
...
}
这是我的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
    ...
}
[函数名(函数名)]
公共静态异步任务RunOrchestrator([OrchestrationTrigger]DurableOrchestrationContextBase上下文,ILogger日志)
{
...
wait context.CallActivityAsync(“MyLocalActivity”,参数);//成功;代码在此解决方案中
...   
...
wait context.CallActivityAsync(“MyExternalActivity”,参数);//错误;由nuget包引用
...
}

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

出现此问题的原因是调用不同的函数与调用不同项目或nuget包中的方法不同。它们是完全独立的实体,因此添加引用不会导致包含活动功能

实现这一点的正确方法是在单个项目中定义这两个功能。您完全可以让函数定义成为一个shell,然后调用nuget包中的代码

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
    MethodFromNugetPackage(context);
}
[函数名(函数名)]
公共异步任务运行([ActivityTrigger]DurableActivityContextBase上下文)
{
MethodFromNugetPackage(上下文);
}
如果希望在不同的项目中使用这些功能,有两个选项:

1) 在Azure中拥有多个功能服务

2) 在关闭“删除目标中的其他文件”的情况下部署代码。这假定您是从VisualStudio部署的,因此如果您使用的是其他部署方法,则需要查找并调整等效设置。明确地说,这是不建议的,因为您可能会遇到难以追踪的问题,但它应该可以工作。

在一个项目中同时使用这两种功能可能是一种解决方案,但这不是我的!我清楚地提到我在两个不同的项目中有两个职能。我想找到这个架构的解决方案。顺便说一句,谢谢。我更新了我的答案,用了几种方法让你在不同的项目中发挥作用。将函数定义包含在nuget包中将不起作用。