错误:将 Function 部署到 Azure 后,无法加载文件或程序集“System.ServiceModel,版本 = 4.0.0.0”

Posted

技术标签:

【中文标题】错误:将 Function 部署到 Azure 后,无法加载文件或程序集“System.ServiceModel,版本 = 4.0.0.0”【英文标题】:Error: 'Could not load file or assembly 'System.ServiceModel, Version=4.0.0.0' after deploying Function to Azure 【发布时间】:2020-04-28 08:13:20 【问题描述】:

我使用 Azure v1 函数(C#、.NET Framework 4.6.1)来调用外部 WCF 服务,并且为了使其工作,我添加了对 System.ServiceModel 程序集的引用。这在我的本地开发机器上运行良好,但在将功能部署到 Azure 后,我收到以下错误:

错误:无法加载一种或多种请求的类型。无法加载文件或程序集“System.ServiceModel,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”。系统找不到指定的文件。

我尝试使用应用服务编辑器将 dll 作为本地副本/直接添加到实时二进制文件中,但这导致了另一个错误:

...(如上) 不应加载引用程序集以供执行。它们只能在仅反射加载器上下文中加载。

当我删除程序集引用并改为安装 nuget 包 System.ServiceModel.Primitives 时,会发生同样的错误。

【问题讨论】:

【参考方案1】:

您应该检查/尝试的几件事:

1-FUNCTIONS_EXTENSION_VERSION 默认值为“~2”。确保你有“~1”。更多信息:https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings#functions_worker_runtime

1.1-如果上述方法不起作用,您可以考虑将 Azure Function 放入容器中,然后您就可以指定/部署依赖项:https://docs.microsoft.com/en-us/azure/devops/pipelines/targets/function-app-container?view=azure-devops&tabs=yaml

1.2-上面可能很复杂,所以作为一个简化版本,你可以保留 Azure Function 作为触发机制,并将所有业务逻辑移动到一个 Azure Container Instance,在那里你可以更好地控制你的依赖关系应用程序。

【讨论】:

以上是关于错误:将 Function 部署到 Azure 后,无法加载文件或程序集“System.ServiceModel,版本 = 4.0.0.0”的主要内容,如果未能解决你的问题,请参考以下文章

Azure 应用服务Python fastapi Function在Azure

React App 部署到 Azure 应用服务后失败

HTTP 错误 500.32 - 将自包含 .Net Core 3.1 应用程序部署到 Azure 后,ANCM 无法加载 dll

Azure 部署后 ASP.NET Core MVC webapp 错误

Azure YAML 部署失败并显示“错误:无法将 Web 包部署到应用服务。冲突(代码:409)”

使用 Capistrano 将 Ruby on Rails 应用程序部署到 Windows Azure VM 时出现超时错误