我有一个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也显示这个程序集正在被还原,但它仍然不断地给出这个错误。还有什么可能是错误的,如何去调试这个问题?
5条答案
按热度按时间x3naxklr1#
原来是版本不匹配的问题。目前,
WindowsAzure.Storage
包的版本可与AzureFunctions is 7.2.1
一起使用。我有一个自定义程序集,它对8.1.1
有依赖关系,这就是为什么我试图使用project.json
安装它。显然这是不可能的。我切换到
7.2.1
,然后它就工作得很好。如果你正在编写预编译函数,这总是会有问题,因为依赖关系应该与Azure函数的开箱即用相匹配。我希望微软在未来的版本中改进这种体验。62lalag42#
WindowsAzure.Storage
会自动被环境引用,因此您不应手动执行此操作。清理您的
project.json
,只使用函数脚本中的程序集:通过显式引用NuGet包,您可能会遇到版本冲突。
请参阅here“引用外部程序集”一节。
rsl1atfo3#
你可以在Azure函数中使用
WindowsAzure.Storage 8.1.1
,但需要将其放入自定义程序集所在的Azure函数的bin/
目录中(* 共享程序集策略 *)。首先探测和加载位于bin/
中的任何程序集,然后再考虑nuget依赖项/包。只需使用Azure功能门户、应用服务编辑器、Kudu或FTP将
Microsoft.WindowsAzure.Storage.dll
移动到/bin
。根据我的经验,Azure函数运行时依赖项将优先于任何
project.json
目标。一旦Azure函数运行时将目标程序集加载到AppDomain
中,nuget restore
自动转换为/data/Functions/packages/nuget
将不允许您使用它们。bq8i3lrv4#
我只是卸载了.NET 6和Azure Functions Core Tools,然后安装了.NET 6 SDK和Function Core Tools,问题自动解决
已解决
ukxgm1gy5#
我们的内部NuGet包也有类似的问题,问题是它只为x64架构构建,默认情况下,Azure函数是使用x32创建的。
因此,修复方法是为x32和x64编译NuGet,或者如果您无法做到这一点,请尝试将Azure Function平台更改为64位