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 Function 的 bin/
目录中(共享组件策略)。在考虑 nuget 依赖项/包之前,首先探测和加载位于 bin/
中的任何程序集。
只需使用 Azure Function Portal、AppService Editor、Kudu 或 FTP 移动 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 Newtonsoft.Json 加载错误