如何解决此NewtonSoft版本冲突?

时间:2018-05-21 22:17:49

标签: azure dependencies azure-functions azure-functions-runtime

我正在开发Azure功能。我正在使用Microsoft.Azure.Devices.Shared,这需要NewtonSoft v11,所以我已经实现了一些手动绑定重定向与应用程序域似乎正在工作(见下文)。但不知何故,如果我正确地阅读下面的日志,那么NewtonSoft与WebJob应用程序域有一个很难的参考:

  

2018-05-21T22:03:03.824 [信息]例外:   [A] Newtonsoft.Json.Linq.JObject无法强制转换为   [B] Newtonsoft.Json.Linq.JObject。 A型起源于   'Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'在上下文'默认'位置   'D:\ Program Files   (86)\ SiteExtensions \功能\ 1.0.11702 \ BIN \ Newtonsoft.Json.dll”。   B型来自'Newtonsoft.Json,Version = 11.0.0.0,   在上下文中,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'   “LoadNeither”在一个字节数组中。

我的Newtonsoft v11 dll位于函数的bin目录中,并在那里被引用,如下所示:

#r "bin\Newtonsoft.Json.dll"

函数中的实际代码在函数中正常工作:

dynamic eventHubMessage =
JsonConvert.DeserializeObject<JObject>(myEventHubMessage);

但是当它碰到这一行时:

CRSLTwinData twinData = IotHubProxy.GetTwinData(hubDeviceId);

抛出异常。其中提到M.A.D.Shared和Newtonsoft 11。

我已尽力使用该功能来使用11版本的dll,但有些事情显然不合时宜。

更新:我们尝试重定向到9而得到了这个:

  

2018-05-22T13:24:48.336 [信息]异常:[A] Newtonsoft.Json.Linq.JObject无法转换为   [B] Newtonsoft.Json.Linq.JObject。 A型起源于   'Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'在上下文'默认'位置   'D:\ Program Files   (86)\ SiteExtensions \功能\ 1.0.11702 \ BIN \ Newtonsoft.Json.dll”。   B型来自'Newtonsoft.Json,Version = 10.0.0.0,   在上下文中,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'   位于'D:\ local \ Temporary ASP.NET的'LoadFrom'   文件\根\ e801054b \ 3f30c00f \组件\ DL3 \ e5381214 \ 00f64e9a_9af1d301 \ Newtonsoft.Json.dll”。

然后我们尝试重定向到10并得到了这个:):

  

2018-05-22T14:16:14.509 [信息]例外:   [A] Newtonsoft.Json.Linq.JObject无法强制转换为   [B] Newtonsoft.Json.Linq.JObject。 A型起源于   'Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'在上下文'默认'位置   'D:\ Program Files   (86)\ SiteExtensions \功能\ 1.0.11702 \ BIN \ Newtonsoft.Json.dll”。   B型来自'Newtonsoft.Json,Version = 10.0.0.0,   在上下文中,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'   位于'D:\ local \ Temporary ASP.NET的'LoadFrom'   文件\根\ e801054b \ 3f30c00f \组件\ DL3 \ e5381214 \ 00f64e9a_9af1d301 \ Newtonsoft.Json.dll”。

2 个答案:

答案 0 :(得分:0)

我认为你正在使用知道assembly resolution problem的azure函数1.0。

由于webjob使用了Newtonsoft json的严格版本号,我在我的项目中所做的就是将所有我的版本降级为与sdk的内联版本

答案 1 :(得分:0)

使用Microsoft.NET.Sdk.Functions版本1.0.13,该版本使用Newtonsoft.Json 10.0.3