持续收到“无法加载DLL 'SQLite.Interop.dll'”的错误:在使用C#.net 4.6.1的VS 2017中。

3
我在Visual Studio 2017的Web项目中遇到了以下错误:
无法加载DLL 'SQLite.Interop.dll':找不到指定的模块。(来自HRESULT的异常:0x8007007E)
现在,我已经阅读了所有其他具有相同或类似标题的StackOverflow问题,并且没有一个提到的解决方案适用于我。
最奇怪的是,SQLite.Interop.dll文件位于我的\bin文件夹以及x86和x64文件夹内。
虽然启用了Fusion日志,但它似乎根本没有发现这个问题。
感觉像是IIS正在缓存某些内容。
以下是关于我的环境和正在进行的工作的更多详细信息:
- 我使用的是IIS 10.0.17134.1 - 运行在Windows 10 build 17134.523上 - 使用Visual Studio 2017(15.8.6) - .Net项目配置为使用.Net 4.6.1 - 罪魁祸首是NHibernate(5.2.3)的调用
Configuration.BuildSessionFactory()
- 我的项目使用FluentNhibernate和许多其他nuget包。 - 我只使用Sqlite Nuget包System.Data.SQLite.Core版本1.0.109.2
此外,我有一个基础项目,这实际上是起作用的。
我正在将其转换为Visual Studio模板,导出它,然后创建一个新的自定义Visual Studio模板类型的项目。
正是这个新创建的项目不想工作。 实际上,当我第一次运行时,Visual Studio会下载所有nuget包,但不会复制sqlite.interop.dll文件。
只有当我第二次重新构建解决方案时,它才会复制文件。
但我仍然收到错误消息。
因此,我要强调的是,实际的dll(SQLite.Interop.dll)确实存在于bin目录中,并且IIS网站托管在该目录中。
但我仍然遇到了这个错误。
是否有任何原因导致这种情况??
我觉得这可能与Visual Studio模板有关,但我看不出手动创建的项目和模板创建的项目之间的区别。 但我认为这有点无关紧要,为什么我会收到错误消息?
感谢您的帮助。

你检查了构建平台(x86、x64)吗?你可以检查 SQLLite DLL 的目标以及应用程序的构建目标。请检查两者是否匹配。 - Manoj Choudhari
你有检查过这个答案吗?https://dev59.com/_VwY5IYBdhLWcg3waXO5#32639631 - hazzik
是的,dll 是正确的目标类型,我确实看了那个 stackoverflow 的问题,并且尝试了所有这些步骤。 @hazzik,那些步骤只是为了让 dll 复制到输出位置,就像我提到的那样,这已经发生了。 - Quintonn
很难验证您是否真正阅读了所有相关主题,所以如果我建议您已经尝试过的内容,请原谅我。当IIS运行网站时,Sqlite.Interop.dll和其他必需文件是否未被复制到“Temporary ASP.NET Files”文件夹中? - Florian Lim
可能是这样,我该如何确认呢?这些文件复制到了哪个位置呢? 顺便说一下,我没有使用IIS Express,而是使用具有实际虚拟目录的本地IIS,所以我认为这些文件不应该被复制。正如我提到的,其他站点在同一台笔记本电脑上运行良好。 - Quintonn
1个回答

0

我在尝试使用Entity Framework设计edmx文件时,也遇到了这个错误。

最终我从SQLite FAQ中找到了解决方案https://system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q10

(11) 为什么我在运行应用程序时会收到DllNotFoundException(针对“sqlite3.dll”或“SQLite.Interop.dll”)的错误消息?

要么无法找到命名的动态链接库(DLL),要么由于缺少依赖项而无法加载它。确保命名的动态链接库位于应用程序目录或系统PATH路径中的某个目录中,并重试。此外,请确保已安装必要的Visual C++运行时可再发行版,除非您正在使用已静态链接到它的动态链接库。

所以我只需将SQLite.Interop.dll复制到PATH变量引用的某个位置(我很懒,所以我只是将它放在了C:\Windows中)。我不需要手动选择x86或x64来进行我的项目,它仍然使用Any CPU,现在一切都正常了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接