Azure Functions - 无法加载文件或程序集“Microsoft.WindowsAzure.Storage”

Posted

技术标签:

【中文标题】Azure Functions - 无法加载文件或程序集“Microsoft.WindowsAzure.Storage”【英文标题】:Azure Functions - Could not load file or assembly ''Microsoft.WindowsAzure.Storage' 【发布时间】:2017-07-25 21:22:43 【问题描述】:

即使我在 project.json 文件中指定了依赖项,我也有一个 azure 函数引发以下错误。

“无法加载文件或程序集 'Microsoft.WindowsAzure.Storage, Version=8.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。”


  "frameworks": 
    "net46": 
      "dependencies": 
        "WindowsAzure.Storage": "8.1.1"
      
    
  

我已尝试重新启动应用服务,创建另一个 FunctionApp 以排除主机未加载更新程序集的任何问题,但我仍然无法使其工作。

Nuget restore 还显示此程序集正在恢复,但仍不断出现此错误。还有什么问题以及如何调试此问题?

【问题讨论】:

【参考方案1】:

原来是版本不匹配问题。目前,WindowsAzure.Storage 包的版本与AzureFunctions is 7.2.1 一起可用。我有一个依赖于8.1.1 的自定义程序集,这就是我尝试使用project.json 安装它的原因。

显然无法做到。我切换到7.2.1,然后它工作得很好。如果您正在编写预编译函数,这总是会出现问题,因为依赖项应该与 Azure Functions 开箱即用的可用内容相匹配。我希望微软在未来的修订版中改进这种体验。

【讨论】:

【参考方案2】:

WindowsAzure.Storage 会被环境自动为您引用,因此您不应手动执行此操作。

清理您的 project.json 并使用函数脚本中的程序集:

#r "Microsoft.WindowsAzure.Storage"

通过显式引用 NuGet 包,您可能会遇到版本冲突。

请参阅“引用外部程序集”部分 here。

【讨论】:

谢谢米哈伊尔。即使我从 project.json 中删除了它,我仍然遇到同样的错误。我的 project.json 现在如下: "frameworks": "net46": "dependencies": 【参考方案3】:

您可以在 Azure Function 中使用 WindowsAzure.Storage 8.1.1,您需要将其放入自定义程序集所在的 Azure Functionbin/ 目录中(共享组件策略)。在考虑 nuget 依赖项/包之前,首先探测和加载位于 bin/ 中的任何程序集。

只需使用 Azure Function PortalAppService EditorKuduFTP 移动 Microsoft.WindowsAzure.Storage.dll进入/bin

根据我的经验,Azure Functions Runtime 依赖项将优先于任何 project.json 目标。一旦 Azure Function Runtime 将目标程序集加载到 AppDomain 中,自动将 nuget restore 转换为 /data/Functions/packages/nuget 将不允许您使用它们。

【讨论】:

以上是关于Azure Functions - 无法加载文件或程序集“Microsoft.WindowsAzure.Storage”的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Azure Functions 中加载文件或程序集“Microsoft.Extensions.Configuration.Abstractions,版本=5.0.0.0

Azure Functions 界面弹出错误消息

Blob 存储与 Azure Functions 的兼容性

Azure Functions Newtonsoft.Json 加载错误

无法加载文件或程序集“Microsoft.WindowsAzure.Storage”Azure 函数

Azure Functions 与 Azure 流分析