作者:皇家城市_579 | 来源:互联网 | 2022-12-21 15:32
我正在尝试编写一个计时器触发的Azure函数,该函数下载一堆数据并将其处理到SQLite数据库中。我已经编写了执行此操作的代码,并且可以在自己的计算机上正常运行。但是,Azure中的相同代码会产生DllNotFoundException,抱怨系统无法加载“ e_sqlite3”。
这是完整的错误消息(针对内部异常):
执行函数时异常:FnordFunction
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时发生异常:FnordFunction ---> System.TypeInitializationException:“ SQLite.SQLiteConnection”的类型初始值设定项引发了异常。---> System.DllNotFoundException:无法加载DLL'e_sqlite3':找不到指定的模块。(来自HRESULT的异常:0x8007007E)
在SQLitePCL.SQLite3Provider_e_sqlite3.NativeMethods.sqlite3_libversion_number()
在SQLitePCL.SQLite3Provider_e_sqlite3.SQLitePCL.ISQLite3Provider.sqlite3_libversion_number()
在SQLitePCL.raw.SetProvider(ISQLite3Provider imp)
在SQLitePCL.Batteries_V2.Init()
在SQLite.SQLiteConnection..cctor()
内部异常结束
以下是重现步骤:
在Visual Studio 2017中,我使用最新的模板创建了一个Azure Function项目。
我将代码文件添加到项目中,并编辑了“运行”方法以调用代码。
使用NuGet,我添加了sqlite-net-pcl和其他一些我需要的库。(我还使用SQLite在EntityFrameworkCore上尝试过;这也不起作用)。
建立
发布
跑。失败。
问题可能是我的代码是错误的,但是当我只创建一个控制台.exe时,它可以正常工作。
问题可能是VS2017在构建时未为SQLite捆绑正确的dll。我不确定该如何解决。我从其他搜索中已经看到,当平台目标设置为“任何CPU”时,会弹出相同的错误消息,但是将其更改为x86或x64并不能解决问题。
问题可能是我尝试过的SQLite库无法在Azure Functions沙箱中运行。如果是这样,是否有任何简单的SQLite库将在沙箱中运行?
提前致谢...
1> David Ebbo..:
问题在于,当在Function App中运行时,无法从您的bin
文件夹自动加载本机二进制文件,因此找不到DLL。
解决此问题的一种方法是将其放入您的D:\home\site\tools
文件夹中(例如,使用Kudu Console),因为该文件夹会自动放置在PATH上。