【发布时间】:2018-05-04 07:06:10
【问题描述】:
我有一个 azure 函数,它从我单独创建并上传到函数文件夹的 DLL 中调用静态方法,以及它的所有依赖项(发布文件夹中的所有 dll 都上传到 azure 函数)。
当我尝试调用该函数时,我收到一个错误 无法加载文件或程序集 'Microsoft.SharePoint.Client.Runtime, Version=16.1.3912.1204
如果我上传此版本的 Microsoft.SharePoint.Client.Runtime,我会收到一条错误消息,提示它再次需要其他版本: 无法加载文件或程序集“Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0
这怎么可能?它在 Azure 之外成功运行。为什么它需要同一个 DLL 的两个版本?项目引用16.1.3912.1204,这是\bin\release文件夹下的dll版本。
旁注:我的 .NET GAC 文件夹包含版本 16.0.0.0。如果由于某种原因在 Microsoft.SharePoint.Client dll 中需要引用这两个版本,我如何在 azure 函数中包含同一文件的两个版本?
【问题讨论】:
-
我在应用服务编辑器中使用直接 URL:{functionAppName}.scm.azurewebsites.net/dev/wwwroot/ 打开了函数应用,然后尝试为其他版本的 DLL 创建子文件夹,但这不是应用程序拾取的。它只在函数文件夹中查找。
-
看来您可能需要使用程序集绑定重定向,您可能需要利用
AppDomain.CurrentDomain.AssemblyResolve来解决您的问题。此外,这里还有一些类似的问题,您可以关注azure-functions-binding-redirect、How to fix the assembly binding redirect problem in Azure Functions。 -
我通过确保所有项目引用都指向包 dll(来自包子文件夹)以消除潜在的版本冲突,然后从 bin 文件夹上传所有 DLL 来解决此问题。
-
您可以发布您的答案并为可能遇到类似问题的其他社区成员总结您的解决方案。
标签: function azure reference .net-assembly