C# 为什么在Azure函数中使用SQLite会给我带来DLLNotFoundException?

C# 为什么在Azure函数中使用SQLite会给我带来DLLNotFoundException?,c#,sqlite,azure,azure-functions,C#,Sqlite,Azure,Azure Functions,我正在尝试编写一个计时器触发的Azure函数,该函数下载一组数据并将其处理到SQLite数据库中。我已经编写了这样的代码,并且在我自己的机器上运行良好。但是,Azure中的相同代码会产生DllNotFoundException,抱怨系统无法加载“e_sqlite3” 以下是完整的错误消息(针对内部异常): 执行函数时出现异常:FnordFunction Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常 执行函数时:FnordF

我正在尝试编写一个计时器触发的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\u e\u sqlite3.SQLitePCL.ISQLite3Provider.sqlite3\u libversion\u number()

位于SQLitePCL.raw.SetProvider(ISQLite3Provider imp)

在SQLitePCL.batters_V2.Init()上

在SQLite.SQLiteConnection..cctor()上

内部异常结束

以下是复制的步骤:

  • 在Visual Studio 2017中,我使用最新模板创建了一个Azure函数项目
  • 我将代码文件添加到项目中,并编辑“Run”方法来调用代码
  • 使用NuGet,我添加了sqlite net pcl和一些我需要的其他库。(我也尝试过使用EntityFrameworkCore,使用SQLite;这也不起作用)
  • 建造
  • 发表
  • 跑。失败
  • 问题可能是我的代码错了——但当我只创建一个console.exe时,它就可以正常工作了

    问题可能是VS2017在构建SQLite时没有绑定正确的dll。我不知道如何解决这个问题。我从其他搜索中看到,当平台目标设置为“任意CPU”时,会弹出相同的错误消息,但将其更改为x86或x64并不能解决问题

    问题可能是我尝试过的SQLite库无法在Azure函数沙箱中运行。如果是这样,是否有任何简单的SQLite库将在沙箱中运行


    提前感谢…

    问题是,在函数应用程序中运行时,无法从您的
    bin
    文件夹自动加载本机二进制文件,因此无法找到DLL


    解决此问题的一种方法是将其放入
    D:\home\site\tools
    文件夹中(例如使用Kudu控制台),因为该文件夹会自动放置在路径上。

    或者可能是因为它根本找不到它?作为测试,如果您将其(x86版本)放入
    D:\home\site\tools
    (通过Kudu控制台)中,它是否有效?谢谢您,Dave,这确实解决了问题。很高兴听到这个消息!我把它作为一个实际的答案添加进来,这样你就可以接受了。我想为其他试图追踪这个问题的人添加一个重要的提示。在本地测试时(即,使用VS进行调试),从sqlite下载站点下载适当的sqlite dll,将其放入Windows路径,并将
    sqlite3.dll
    重命名为
    e_sqlite3.dll
    ,这将对测试起作用@David如果你有更好的建议,请添加。谢谢Tim Mar!David Ebbo:“手动将其放入D:\home\site\tools文件夹”对于自动部署来说是有问题的。难道没有别的解决办法吗?