我最近合并了 2 个项目(由 Azure Functions 和通用库组成的服务),我必须升级一些依赖项以修复合规性和兼容性问题。
函数应用程序已正确部署,但在调用函数时我得到以下信息:
Exception while executing function: ActiveTestEventGenV2 Could not load file or assembly 'System.Text.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
我将解决方案中的所有项目更新为目标
net6.0
并且我正在使用 Azure Functions V4。
我对正在发生的事情有一个模糊的概念;我对
System.Text.Json
有直接依赖,并且对相同的版本也有传递依赖,但版本不同。
我不完全理解这个问题。请链接解释该问题的任何文档、博客或视频。 我在下面链接了一个博客,但我认为该博客不适用于我的错误,因为我不针对较旧的 dotnet 版本 - 我的所有项目都针对
net6.0
.
以下是我尝试解决该问题的全部内容:
我阅读了此博客并添加了 RestoreProjectStyle,但无法解决问题:https://www.hanselman.com/blog/referencing-net-standard-assemblies-from-both-net-core -和网络框架
显式添加对每个 csproj 文件的依赖关系,但不起作用。
在解决方案的通用 Directory.Build.targets 中添加了显式依赖项,但不起作用。
添加了一个构建脚本,可自动将 dll 复制到发布目录。 dll已复制,但没有解决问题。函数应用程序仍然遇到上述问题。
我找不到如何在 Visual Studio 2022 中设置“复制本地”(基本上强制将本地 dll 复制到最终版本)。
我将csproj选项设置为true,不起作用!
使用Visual Studio尝试合并依赖关系,它没有显示多个版本的
System.Text.Json
。
我可以得到一些帮助吗?
当我写这个问题时,我计划运行依赖分析器并查看我的解决方案正在使用哪个版本的
System.Text.Json
。
这与 Azure Function 清理它认为不必要的 dll 以减少部署大小有关。
似乎有效的是在 PropertyGroup 中添加
<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
标志 - 请注意,这可能会增加您的函数大小并增加您的冷启动时间。由于我的用例,我并不太关心它,但是还有另一种方法可以将依赖项列入白名单。这是一篇解释这一点的博客文章:https://bryanknox.github.io/2022/07/15/functionsskipcleanoutput-and-functionspreserveddependency.html.