【问题标题】:Azure function wants two versions of the same DLLAzure 函数需要同一个 DLL 的两个版本
【发布时间】: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-redirectHow to fix the assembly binding redirect problem in Azure Functions
  • 我通过确保所有项目引用都指向包 dll(来自包子文件夹)以消除潜在的版本冲突,然后从 bin 文件夹上传所有 DLL 来解决此问题。
  • 您可以发布您的答案并为可能遇到类似问题的其他社区成员总结您的解决方案。

标签: function azure reference .net-assembly


【解决方案1】:

不要尝试手动上传全局 nuget 包。而是参考此线程 How can I use NuGet packages in my Azure Functions? 将 nuget 库导入您的 Azure 函数生态系统。

之后就可以直接使用那些c#库了,例如

using Microsoft.SharePoint;

【讨论】:

  • 奇怪的是,这不起作用;我包含了完整的 nuget 包列表,但收到了关于找不到程序集的警告。最终,确保所有项目引用都指向包 dll 以消除版本冲突,然后从 bin 文件夹上传所有 DLL 解决了它。
  • @Shane;很高兴,它奏效了。看起来问题是您使用同一库的多个版本的典型问题。
【解决方案2】:

确保所有项目引用都指向包文件夹 (nuget) dll 以消除版本冲突,然后从 bin 文件夹上传所有 DLL 解决了这种情况下的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多