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

qlfbtfca  于 2022-11-30  发布在  Windows
关注(0)|答案(5)|浏览(233)

我有一个azure函数,即使在project.json文件中指定了依赖项,它也会引发以下错误。
未能加载文件或程序集“Microsoft.WindowsAzure.Storage,Version=8.1.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或它的某个依赖项。系统找不到指定的文件。

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

我已经尝试重新启动应用程序服务,创建另一个FunctionApp来排除主机不加载更新的程序集的任何问题,但我仍然无法让它工作。
Nuget restore也显示这个程序集正在被还原,但它仍然不断地给出这个错误。还有什么可能是错误的,如何去调试这个问题?

x3naxklr

x3naxklr1#

原来是版本不匹配的问题。目前,WindowsAzure.Storage包的版本可与AzureFunctions is 7.2.1一起使用。我有一个自定义程序集,它对8.1.1有依赖关系,这就是为什么我试图使用project.json安装它。
显然这是不可能的。我切换到7.2.1,然后它就工作得很好。如果你正在编写预编译函数,这总是会有问题,因为依赖关系应该与Azure函数的开箱即用相匹配。我希望微软在未来的版本中改进这种体验。

62lalag4

62lalag42#

WindowsAzure.Storage会自动被环境引用,因此您不应手动执行此操作。
清理您的project.json,只使用函数脚本中的程序集:

#r "Microsoft.WindowsAzure.Storage"

通过显式引用NuGet包,您可能会遇到版本冲突。
请参阅here“引用外部程序集”一节。

rsl1atfo

rsl1atfo3#

你可以在Azure函数中使用WindowsAzure.Storage 8.1.1,但需要将其放入自定义程序集所在的Azure函数bin/目录中(* 共享程序集策略 *)。首先探测和加载位于bin/中的任何程序集,然后再考虑nuget依赖项/包。
只需使用Azure功能门户应用服务编辑器KuduFTPMicrosoft.WindowsAzure.Storage.dll移动到/bin
根据我的经验,Azure函数运行时依赖项将优先于任何project.json目标。一旦Azure函数运行时将目标程序集加载到AppDomain中,nuget restore自动转换为/data/Functions/packages/nuget将不允许您使用它们。

bq8i3lrv

bq8i3lrv4#

我只是卸载了.NET 6和Azure Functions Core Tools,然后安装了.NET 6 SDK和Function Core Tools,问题自动解决

已解决

ukxgm1gy

ukxgm1gy5#

我们的内部NuGet包也有类似的问题,问题是它只为x64架构构建,默认情况下,Azure函数是使用x32创建的。
因此,修复方法是为x32和x64编译NuGet,或者如果您无法做到这一点,请尝试将Azure Function平台更改为64位

相关问题