在VS 2017中使用C#.net 4.6.1不断获取“无法加载DLL'SQLite.Interop.dll':”“

时间:2019-01-28 17:49:40

标签: c# .net nhibernate visual-studio-2017 sqlite-net

我在Visual Studio 2017中的Web项目中遇到以下错误:

  

无法加载DLL'SQLite.Interop.dll':指定的模块可能   找不到。 (来自HRESULT的异常:0x8007007E)

现在,我已阅读其他标题相同或相似的StackOverflow问题的全部,并且上述解决方案的对我有用。

最奇怪的是, SQLite.Interop.dll 文件位于我的\ bin文件夹中,同时位于x86和x64中。

启用了融合日志,但似乎根本无法解决问题。

它对我“感觉”就像我的IIS正在缓存某些内容。

以下是有关我的环境和我在做什么的更多详细信息:

  • 我正在使用IIS 10.0.17134.1
  • 在Windows 10内部版本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模板有关,但是我看不到手动创建的项目和模板创建的项目有什么区别。但是我认为这不是重点,为什么我会收到错误消息?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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)或   由于缺少依赖项而无法加载。确保命名   动态链接库位于应用程序目录或   路径,然后重试。另外,请确保   除非已安装必要的Visual C ++运行时可再发行组件,否则   您正在使用静态链接构建的动态链接库   

因此,我只是将SQLite.Interop.dll复制到PATH变量引用的位置(我很懒,所以我只是将其放置在C:\ Windows中)。我不必为项目手动选择x86或x64,它仍然使用Any CPU,现在一切正常。