我正在开发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”。
答案 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