Azure 函数 SDK 导致 Newtonsoft 问题

Posted

技术标签:

【中文标题】Azure 函数 SDK 导致 Newtonsoft 问题【英文标题】:Azure function SDK Causing Newtonsoft issue 【发布时间】:2019-11-18 22:41:09 【问题描述】:

我们在 .Net Frame work 4.6 的 Visual Studio 2017 中使用 azure function SDK。我们添加了 nuget 包

Microsoft.Azure.Devices.Shared 1.15.1 Newtonsoft.Json 12.0.1 AzureFunctions.Autofac 3.0.7(用于依赖注入)

在创建 Twin 实例时,我们会收到以下异常消息

"message": "无法加载文件或程序集 'Newtonsoft.Json,Version=10.0.0.0, > Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或 它的依赖项之一。系统找不到指定的文件。",

我们尝试将包降级到

Newtonsoft.Json 10.0.1

然后我们通过用 Newtonsoft.Json 版本 12.0.1 替换缺少的 Newtonsoft.Json 版本 10.0.1 得到同样的错误。

这是我们正在遵循的代码。

    Twin updatetwin = new Twin(); 
    updatetwin.ETag = "*"; 
    var body = await RequestBody(req); 
    var newtwin =JsonConvert.DeserializeObject<PropertyViewModel>(body);

【问题讨论】:

你必须使用 .NET Framework 吗?如果您可以切换到 NET Core 和 Functions v2,那么关于依赖关系的整个问题应该会消失。 @silent 我们有很多用 .net 框架编写的代码,改变它需要很多时间有没有其他方法可以解决 dll 丢失问题? 【参考方案1】:

我正在使用

Newtonsoft.Json 9.0.1

使用 .net 框架 4.6 和

Microsoft.NET.Sdk.Functions 1.0.13

您可以在 nuget 包管理器中检查所需的依赖项-

【讨论】:

我们无法将 Newtonsoft.Json 降级到 10.0.1 以下,因为 Microsoft.Azure.Devices.Shared 1.15.1 无法在 10.0.1 以下运行。有没有我们可以像 app.config /web.config 一样指定使用哪个版本的 newtonsoft.json? 您可以使用 Microsoft.NET.Sdk.Functions = 1.0.28,因为它依赖于 Newtonsoft.Json (= 11.0.2)

以上是关于Azure 函数 SDK 导致 Newtonsoft 问题的主要内容,如果未能解决你的问题,请参考以下文章

Azure SDK for php blob 下载导致内存不足

Azure WebJobs SDK TimerTrigger 函数未运行

使用 Azure JS SDK for Service Bus 时需要关闭连接吗?

Azure Function v2 引用了 Newtonsoft.Json 版本高于 Microsoft.NET.Sdk.Functions 的项目

Azure 函数中的 switch 表达式导致异常

azure sdk deleteAsync 请求内容 null