我有一个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中找到方法?我是否需要使用属性装饰程序集?或者做自定义类型定位器?
任何人都有这样的例子可以使用吗?
答案 0 :(得分:2)
很可能你有一个依赖性计时问题。 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(); }