我有一个Azure函数,它最终执行这行代码:
cosmosClient = new DocumentClient(endpoint, key, mode, null);
这适用于我们使用的大型Web应用程序,也适用于测试工具。当我调用在Azure函数中调用它的代码时,它会产生以下异常:
Exception while executing function: Functions.ColdStorageReset. mscorlib: Exception has been thrown by the target of an invocation. zzz.DataLayer: Method not found: 'Void Microsoft.Azure.Documents.Client.DocumentClient..ctor(System.Uri, System.String, Microsoft.Azure.Documents.Client.ConnectionPolicy, System.Nullable`1<Microsoft.Azure.Documents.ConsistencyLevel>, Newtonsoft.Json.JsonSerializerSettings)'.
2018-01-25T22:33:15.436
所有位置的Microsoft.Azure.Documents.Client.dll版本均为1.15.1.1。我也试过这个:
cosmosClient = new DocumentClient(endpoint, key, mode);
这给了我同样的结果。
有什么想法吗?
答案 0 :(得分:1)
Sheesh ......这真是一场真正的噩梦。
我最终通过更新视线中的每个依赖来克服这个初始冲突。在那之后,它消失了,没有我从根本上理解问题是什么。然后,经过另一轮更新,它再次出现,这次是与Microsoft.IdentityModel.Clients.ActiveDirectory库,抱怨它无法加载我没有引用的版本(在最后的标签中,我真的没有引用它。)
拔出我的头发试图弄清楚引用来自哪里后,我绝望并开始反编译依赖的dll来查看引用。令人难以置信的是,这很有效,我找到了一个依赖的dll,它引用了旧版本的M.I.C.ActiveDirectory。这里发生的整体问题是:
我的库引用了一个依赖库,而该库又引用了问题库的错误版本。由于app.config中的绑定重定向而在本地编译时,这一点并不明显。
Azure功能不(本机地)支持绑定重定向,因此必须手动实现重定向。我在这里找到了这种方法的实现:https://codopia.wordpress.com/2017/07/21/how-to-fix-the-assembly-binding-redirect-problem-in-azure-functions/。
尽管文章指出,每次执行函数时调用重定向函数似乎都没问题。简而言之,您正在使用绑定重定向信息添加功能应用设置,在代码中反序列化,然后调用某个应用域jiggery-pokery来实际执行重定向。它工作得很漂亮。
与文章说明一样,唯一的缺点是每次更新lib时都必须更新应用程序设置,但这是我现在可以使用的东西。