Azure WebJobs:在另一个程序集中找不到函数

Azure WebJobs: No functions found in another assembly

我有一个 WebJob 项目 - 称之为项目 A。我想在另一个程序集中定义一些 WebJob 函数 - 称之为程序集 B。

WebJobs 没有找到我在程序集 B 中设置的任何作业函数。我可以将该方法从程序集 B 移动到项目 A,WebJobs 发现它很好 - 所以看起来该方法是正确的。

下面是一个在项目 A 中有效但在程序集 B 中无效的作业方法示例:

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage, TextWriter logger)
{
    logger.WriteLine(logMessage);
}

程序集 B 中的 class 是 public。程序集 B 引用了 WebJobs SDK,项目 A 引用了程序集 B。我已通过确保程序集 B 在 A 的域程序集中来验证这一点。

那么,为什么 WebJob 宿主找不到程序集 B 中的方法?我需要用属性装饰程序集吗?或者做一个自定义类型定位器?

有没有人让这样的东西起作用的例子?

您很可能遇到依赖性计时问题。 JobHost 将索引当前 AppDomain 中的程序集,因此如果在 JobHost 进行索引时您还没有将任何依赖项加载到您的主 exe 中,那么您的第二个程序集将不会被索引。

最快的解决方法是在 JobHost 进行索引之前手动将其加载到您的应用程序域或使用第二个程序集中的一些代码。

示例:

static void Main(string[] args) {
//Data _dummy = new Data(); // reference a type in the other assembly

AppDomain.CurrentDomain.Load("Assembly2"); // manually load into the current domain

var config = new JobHostConfiguration();

var host = new JobHost(config);
host.RunAndBlock(); }