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

本文关键字:程序集 集中 找不到 函数 程序 另一个 Web Jobs Azure | 更新日期: 2023-09-27 17:56:09

我有一个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 中的类是公共的。程序集 B 具有对 WebJobs SDK 的引用,项目 A 具有对程序集 B 的引用。我已经通过确保程序集 B 位于 A 的域程序集中来验证这一点。

那么,为什么 WebJob 宿主在程序集 B 中找不到该方法呢?是否需要使用属性修饰程序集?还是自定义类型定位器?

有人让这样的东西工作的例子吗?

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

很可能您有依赖项计时问题。 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(); }