C# Azure函数为Azure文档客户端构造函数引发异常(在测试工具中工作)

C# Azure函数为Azure文档客户端构造函数引发异常(在测试工具中工作),c#,azure,azure-cosmosdb,azure-functions,C#,Azure,Azure Cosmosdb,Azure Functions,我有一个Azure函数,它最终执行以下代码行: cosmosClient = new DocumentClient(endpoint, key, mode, null); 这在我们使用的大型web应用程序中非常有效,在测试工具中也非常有效。当我在Azure函数中调用调用此函数的代码时,会产生以下异常: Exception while executing function: Functions.ColdStorageReset. mscorlib: Exception has been thro

我有一个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.IdentityModel.Clients.ActiveDirectory库,抱怨它无法加载我没有引用的版本(在最后的统计中,我确实没有引用它)

在试图弄清楚引用来自何处之后,我感到绝望,开始对依赖DLL进行反编译以查看引用。令人难以置信的是,这起作用了,我找到了一个依赖dll,它引用了旧版本的M.I.C.ActiveDirectory。这里出现的总体问题是:

我的库引用了一个依赖库,而依赖库又引用了问题库的错误版本。这在本地编译时并不明显,因为app.config中存在绑定重定向。

Azure函数(本机)不支持绑定重定向,因此必须手动实现重定向。我在这里找到了此方法的实现:

不管文章指出了什么,每次执行重定向函数时调用该函数似乎都没有问题。简言之,您正在添加一个带有绑定重定向信息的函数应用程序设置,在代码中对其进行反序列化,然后调用一些应用程序域jiggery Porky来实际执行重定向。它工作得很好


就像文章中的注释一样,唯一的缺点是每次更新lib时都必须更新应用程序设置,但这是我目前可以接受的。

这是一个编译函数吗?您的
cosmosClient
变量是如何定义的,在哪里?它是一个csx。它在类级别定义为:privatedocumentclient-cosmosClient;首先,我假设这是v1主机运行时上的预编译函数?您的项目引用的NewtonSoft.Json版本是什么?NewtonSoft版本是10.0.0.0。是的,所以。。。你不能那样做(我将在下面提供一个更明确的答案。
cosmosClient = new DocumentClient(endpoint, key, mode);