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

Posted

技术标签:

【中文标题】Azure Function v2 引用了 Newtonsoft.Json 版本高于 Microsoft.NET.Sdk.Functions 的项目【英文标题】:Azure Function v2 references a project with a higher version of Newtonsoft.Json than Microsoft.NET.Sdk.Functions 【发布时间】:2019-10-16 12:11:02 【问题描述】:

我正在编写一个 v2 Azure 持久函数。将 C# 对象传递给辅助活动函数时,我的自定义 JsonConverter 用于序列化传递的类型时出现运行时错误。自定义 JsonConverter 位于必须引用 Newtonsoft.Json 12.x 的库中,而 Microsoft.NET.Sdk.Functions 被锁定到 11.0.2。

jObject 错误 CS1705:具有标识“ContractLibrary,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null”的程序集“ContractLibrary”使用“Newtonsoft.Json,版本=12.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”它的版本比引用的程序集“Newtonsoft.Json”更高,身份为“Newtonsoft.Json,Version=11.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”

我相信这个GitHub Issue 是相关的。该问题上的This comment 似乎表明将 Newtonsoft.Json 12.x 添加为 Function 项目的直接依赖项可能会有所帮助。这在另一个 Function 项目中有所帮助,但现在我又碰到了这堵墙。有什么办法可以缓解这种情况吗?

【问题讨论】:

您需要的 12 中究竟有什么...就像 GitHub 上提到的用于降级您的版本需求的 cmets 之一...? 按你说的做(函数项目中的直接引用)每次都对我有用。如果您将警告作为错误打开,您可能还需要在项目配置中仅禁用它生成的特定警告 (NU1608)。 你碰到的墙是什么? @ChrisGillum 我遇到的墙是引用的运行时错误。 您需要使用下面@ChrisGillum 建议的内容。这是一个很好的答案,请点赞 【参考方案1】:

您可以尝试的一件事是绕过 Durable Functions 使用的序列化逻辑并进行自己的序列化。例如,不要这样做:

public static void MyFunc([ActivityTrigger] MyCustomType input)

    // ...

尝试这样做:

public static void MyFunc([ActivityTrigger] JObject json)

    // manually convert the JObect into MyCustomType

如果这能让你更进一步,请告诉我。

【讨论】:

以上是关于Azure Function v2 引用了 Newtonsoft.Json 版本高于 Microsoft.NET.Sdk.Functions 的项目的主要内容,如果未能解决你的问题,请参考以下文章

Azure Blob Storage V2,来自 Azure Function App 的异常 API 调用,升级后

Visual Studio 2019 不会调试 Azure Function V2

为什么在Azure Function v2中运行的ClaimsPrincipal中缺少'identityProvider'声明?

为啥 Azure Function V2 中很少有 Python 包不支持?

使用 Azure Function V2 Durable 函数时,ILogger 不记录到 Application Insights

new操作符的作用